Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XMLEventWriter从头开始:如何发出xmlns属性?_Java_Xml_Xml Namespaces_Stax - Fatal编程技术网

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

Java XMLEventWriter从头开始:如何发出xmlns属性?,java,xml,xml-namespaces,stax,Java,Xml,Xml Namespaces,Stax,我正在尝试使用StAX API中的XMLEventWriter从头开始编写XML文档 我不知道如何获得要发出的默认名称空间属性 例如,默认名称空间URI字符串为“”。我希望它以xmlns=”的形式出现在我的XML根元素中http://www.liquibase.org/xml/ns/dbchangelog/1.9“ 这里的神奇配方是什么?XMLEventWriter.setDefaultNamespace()不起作用 谢谢, Laird使用属性设置此行为: XMLEventFactory eve

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

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

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

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

谢谢, Laird使用属性设置此行为:

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>

使用“写入*”而不是“设置*”


我应该提到,如果我将其作为显式名称空间添加,并构造一个包含该名称空间的迭代器,并调用参数化程度最高的XMLEventFactory#createStartElement()版本,就可以发出它。但我原以为XMLWriter.setDefaultNamespace()会做些什么。我看不出有任何效果;谢谢,但问题是关于XMLEventWriter,而不是XMLStreamWriter。如果我从XMLEventReader中读取一个元素,然后用XMLEventWriter编写它,需要将名称空间添加到某个元素,而不是用createStartElement创建一个事件,该怎么办?那么如何添加名称空间呢?
javax.xml.stream.XMLStreamWriter.writeDefaultNamespace(String)