Java XML: как вывести пространство имен дочерних элементов?

Я использую класс Java Трансформатор для обработки объекта XML-документа.

Это код, который создает Трансформатор:

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 ... />

Как я могу это сделать ?

[ответ на установку пространств имен прямо здесь, в stackoverflow] [1] [1]: stackoverflow.com/questions/10584670/…

Hans 24.10.2012 19:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
4 377
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В описании пакета для javax.xml.transform есть раздел Полное представление имени, который, кажется, подразумевает, что можно получить пространство имен, представленное как на входе, так и на выходе.

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

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

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме