XMLEventWriter从头开始:如何发出xmlns属性?

时间:2010-06-25 16:14:09

标签: java xml xml-namespaces stax

我正在尝试使用StAX API中的XMLEventWriter从头开始编写XML文档。

我无法弄清楚如何获取要发出的默认命名空间属性。

例如,默认名称空间URI字符串为“http://www.liquibase.org/xml/ns/dbchangelog/1.9”。我希望它存在于我的XML根元素中,如xmlns =“http://www.liquibase.org/xml/ns/dbchangelog/1.9”。

这里有什么神奇的食谱? XMLEventWriter.setDefaultNamespace()不起作用。

谢谢, 莱尔德

2 个答案:

答案 0 :(得分:2)

使用属性IS_REPAIRING_NAMESPACES设置此行为:

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();

以上代码发出:

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

答案 1 :(得分:0)

使用“write *”代替“set *”

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