5 Stimmen

XMLEventWriter von Grund auf neu: Wie gebe ich das xmlns-Attribut aus?

Ich versuche, ein XML-Dokument von Grund auf mit dem XMLEventWriter aus der StAX-API zu schreiben.

Ich kann nicht herausfinden, wie man das Standard-Namespace-Attribut ausgeben kann.

Die Standard-Namespace-URI-Zeichenfolge ist beispielsweise " http://www.liquibase.org/xml/ns/dbchangelog/1.9 ". Ich möchte, dass dies in meinem XML-Stammelement als xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9" vorhanden ist.

Was ist hier das Zauberrezept? XMLEventWriter.setDefaultNamespace() hat nicht funktioniert.

Danke! Laird

0 Stimmen

Ich sollte erwähnen, dass ich es emittiert bekommen kann, wenn ich es als explizite Namespace hinzufügen, und konstruieren Sie einen Iterator, der diesen Namespace enthält, und rufen Sie die meisten-Parameter-Version von XMLEventFactory#createStartElement(). Ich hätte aber gedacht, dass XMLWriter.setDefaultNamespace() ausreichen würde etwas . Ich kann nicht erkennen, dass es überhaupt eine Wirkung hat.

4voto

McDowell Punkte 105255

Verwenden Sie die Eigenschaft IS_REPAIRING_NAMESPACES um dieses Verhalten einzustellen:

XMLEventFactory events = XMLEventFactory.newInstance();
QName bar = new QName("urn:bar", "bar");
XMLOutputFactory factory = XMLOutputFactory.newInstance();
factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
XMLEventWriter writer = factory.createXMLEventWriter(System.out);
writer.add(events.createStartDocument());
writer.setDefaultNamespace("urn:bar");
writer.add(events.createStartElement(bar, null, null));
writer.add(events.createEndDocument());
writer.flush();

Der obige Code gibt aus:

<?xml version="1.0"?><bar xmlns="urn:bar"></bar>

2 Stimmen

Was ist, wenn ich ein Element von einem XMLEventReader einlese und es dann mit dem XMLEventWriter schreibe und den Namespace zu einem bestimmten Element hinzufügen muss, ohne ein Ereignis mit createStartElement zu erstellen? Wie kann ich dann einen Namespace hinzufügen?

-1voto

Martín Schonaker Punkte 7162

Verwenden Sie "write*" anstelle von "set*".

javax.xml.stream.XMLStreamWriter.writeDefaultNamespace(String)

0 Stimmen

Hallo Martin, danke, aber die Frage bezog sich auf XMLEventWriter, nicht auf XMLStreamWriter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X