I serialisierte XML erstellen wie folgt:StaX des isRepairingNamespaces Funktion erzeugt ein Präfix anders ‚xml‘ für den XML-Namespace
XMLOutputFactory factory = XMLOutputFactory.newInstance();
factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
StringWriter buffer = new StringWriter();
XMLStreamWriter writer = factory.createXMLStreamWriter(buffer);
writer.writeStartElement("doc");
writer.writeAttribute(javax.xml.XMLConstants.XML_NS_URI, "base", "/mydoc.xml");
writer.writeCharacters("Hello world");
writer.writeEndDocument();
writer.close();
// buffer now contains:
// <doc xmlns:zdef101282835="http://www.w3.org/XML/1998/namespace" zdef101282835:base="/mydoc.xml">Hello world</doc>
So ist die Reparatur-Namespace-Funktion ein Präfix anders als xml
für den http://www.w3.org/XML/1998/namespace
Namespace generiert hat.
Das wäre für mich in Ordnung, wenn die Fehler nicht zurückgegeben würden, wenn das Dokument erneut analysiert würde. Wenn ich versuche, das resultierende Dokument zu analysieren, erhalte ich die folgende Ausnahme:
org.xml.sax.SAXParseException: The prefix "xml" cannot be bound to any namespace other than its usual namespace; neither can the namespace for "xml" be bound to any prefix other than "xml".
Gibt es eine Möglichkeit, die XMLOutputFactory
tun dies richtig zu konfigurieren?
Kurz bevor Sie mir die Methode writeAttribute
mit dem Parameter prefix
mitteilen, kanalisiere ich SAX-Ereignisse zwischen Objekten, ohne wissen zu wollen, was sie sind. Das ist genau der Grund, warum ich möchte, dass der Marshaller Namespaces für mich behandelt ... also muss ich nicht in einem speziellen Fall für einen bestimmten Namespace schreiben, dessen Präfix vorherbestimmt ist. Da der Namespace xml
nicht einmal definiert werden muss (und wahrscheinlich nicht einmal so sein sollte), wäre es eine einfache Ausnahme, in die Codebasis IS_REPAIRING_NAMESPACES
zu schreiben, oder?
Vielen Dank für Anregungen.