В writeStartElement есть prvoide namespaceURI, зачем нужен другой writeNamespace? - PullRequest
2 голосов
/ 11 июля 2011

Код:

XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter writer = outputFactory.createXMLStreamWriter(System.out);
writer.writeStartDocument("1.0");
writer.writeCharacters("\n");
writer.writeStartElement("ns1", "sample", "http://www.e.com/ns1");
writer.writeNamespace("ns1", "http://www.e.com/ns1");
writer.writeEndElement();
writer.writeEndDocument();

Результат:

<?xml version="1.0"?>
<ns1:sample xmlns:ns1="http://www.e.com/ns1"/>

Если я удалю writer.writeNamespace("ns1", "http://www.e.com/ns1");, то результат будет

<?xml version="1.0"?>
<ns1:sample/>

эффект параметра namespaceURI writeStartElement()?

1 Ответ

1 голос
/ 11 июля 2011

Следующее утверждение также выполняет привязку префикса для вас:

writer.writeStartElement("ns1", "sample", "http://www.e.com/ns1");

Если вы затем используете операторы без указания префикса, он будет знать, что префикс должен быть ns1:

writer.writeStartElement("http://www.e.com/ns1", "sample2");
writer.writeEndElement();

Что касается writeNamespace, вам все равно нужно написать объявление пространства имен самостоятельно.

...