public void writeAttribute(QName name, String value) throws XMLStreamException { String prefix = name.getPrefix(); if (prefix.length() > 0) { writeAndDeclareIfUndeclared(prefix, name.getNamespaceURI(), true); } else { if (!name.getNamespaceURI().equals(defaultNamespace.getNamespaceURI())) { prefix = getUniquePrefix(name.getNamespaceURI(), true); } } delegate.writeAttribute(prefix, name.getNamespaceURI(), name.getLocalPart(), value); }
public void writeQName(QName q) throws XMLStreamException { String prefix = q.getPrefix(); if (prefix.length() > 0) { writeAndDeclareIfUndeclared(prefix, q.getNamespaceURI(), true); } else { if (!q.getNamespaceURI().equals(defaultNamespace.getNamespaceURI())) { prefix = getUniquePrefix(q.getNamespaceURI(), true); } } if (prefix.length() > 0) { writeCharacters(prefix); writeCharacters(":"); } writeCharacters(q.getLocalPart()); }
private void writeAndDeclareIfUndeclared(String prefix, String namespace, boolean useExactPrefix) throws XMLStreamException { // xml prefixes are automatic if (prefix.startsWith("xml")) { return; } if (useExactPrefix) { // prefix must match exactally Iterator prefixes = getNamespaceContext().getPrefixes(namespace); while (prefixes.hasNext()) { if (prefix.equals(prefixes.next())) { return; } } } else if (!namespace.equals(defaultNamespace.getNamespaceURI()) && getPrefix(namespace) == null) { // any prefix will do return; } writeNamespace(prefix, namespace); setPrefix(prefix, namespace); }
public void writeStartElementWithAutoPrefix(String namespaceURI, String localName) throws XMLStreamException { // check if there is an existing prefix for this namespace String prefix; if (namespaceURI.equals(defaultNamespace.getNamespaceURI())) { prefix = ""; } else { prefix = getNamespaceContext().getPrefix(namespaceURI); } // if there isn't an existing prefix, generate a new one which we'll declare below boolean declareNs = false; if (prefix == null) { prefix = ""; declareNs = true; } // start the element writeStartElement(prefix, localName, namespaceURI); // declare the namespace in the new element if (declareNs) { writeDefaultNamespace(namespaceURI); } }
public String getUniquePrefix(String namespaceURI, boolean declare) throws XMLStreamException { // attributes use namespace "" if ("".equals(namespaceURI)) { return ""; } if (namespaceURI.equals(defaultNamespace.getNamespaceURI())) { return ""; } String prefix = getNamespaceContext().getPrefix(namespaceURI); if (prefix == null) { prefix = getUniquePrefix(); if (declare) { setPrefix(prefix, namespaceURI); writeNamespace(prefix, namespaceURI); } } return prefix; }
public String getNamespaceURI() { if (namespaceURI != null) { return namespaceURI; } if (parent == null) { return null; } return parent.getNamespaceURI(); }
public void writeAndDeclareIfUndeclared(String prefix, String namespace) throws XMLStreamException { if (!namespace.equals(defaultNamespace.getNamespaceURI()) && getPrefix(namespace) == null) { writeNamespace(prefix, namespace); setPrefix(prefix, namespace); } }