2008-11-10 2 views
3

Я использую класс Java Transformer для обработки объекта XML-документа.Java XML: как вывести пространство имен дочерних элементов?

Это код, который создает Transformer:

import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.OutputKeys; 
import javax.xml.transform.Transformer; 

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "no"); 
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 

transformer.transform(source, result); 

В настоящее время, мой результат выглядит следующим образом: < ... SVG/>. Я хотел бы, чтобы он включал пространство имен каждого элемента, как в < svg: svg .../>

Как это сделать?

+0

[ответ для настройки пространств имен прямо здесь, на StackOverflow] [1] [1]: http://stackoverflow.com/questions/10584670/setting-namespaces-and-prefixes-in-a- Java-дом-документ/13048523 # 13048523 – Hans 2012-10-24 15:09:41

ответ

2

Отметьте, что <svg xmlns="SVGNS" /> - это то же самое, что и <svg:svg xmlns:svg="SVGNS" />.

Вы проверили вас по телефону setNamespaceAware(true) на вашем DocumentBuilderFactory экземпляре?

0

Описание упаковки для javax.xml.transform имеет раздел Представление квалифицированного имени, которое, как представляется, позволяет получить пространство имен, представленное как на входе, так и на выходе.

Мне не совсем ясно, как будет выглядеть результат, за исключением URI пространства имен.

Дайте ему попробовать - надеюсь, у кого-то еще будет больше конкретного опыта.

0

Я обнаружил, что вам нужно надеть его как префикс, даже не использовать пространства имен.

Я использовал, например, el.setAttribute («xmi: type», type), а не el.setAttributeNS («xsi», «type», type); или el.setAttributeNS («http://www...../URI», «тип», тип); Я нахожу, что метод NS не делает то, что вы делаете. Кроме того, он все равно будет отображать xmlns = "..." вместо использования префикса.

Смежные вопросы