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

Lai*_*son 5 java xml stax xml-namespaces

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

我不知道如何获取要发出的默认名称空间属性。

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

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

谢谢,莱尔德

McD*_*ell 4

使用属性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();
Run Code Online (Sandbox Code Playgroud)

上面的代码发出:

<?xml version="1.0"?><bar xmlns="urn:bar"></bar>
Run Code Online (Sandbox Code Playgroud)

  • 如果我从 XMLEventReader 读取一个元素,然后使用 XMLEventWriter 写入它,并且需要将命名空间添加到某个元素,而不是使用 createStartElement 创建事件,该怎么办?那么如何添加命名空间呢? (2认同)