Как избежать добавления XMLNS при использовании Java XML Transformer? - PullRequest
1 голос
/ 19 июня 2011

В JAVA я копирую узлы из одного XML-документа в другой новый документ, используя importNode. В исходном документе определен xmlns, но в выходном документе я бы не хотел, чтобы для каждого копируемого элемента был определен xmlns. Как это сделать?

Ответы [ 3 ]

1 голос
/ 20 июня 2011

Вы говорите, что используете Java XML Transformer, но неясно, имеете ли вы в виду преобразователь идентификаторов (TransformerFactory.newTransformer ()) или интерфейс Java для преобразования XSLT.

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

1 голос
/ 21 июня 2011

Хорошим решением является использование javax.xml.transform.Transformer с XSL, определенным, как показано ниже:

    String stylesheet = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
            "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">" +
            "<xsl:output method=\"xml\" version=\"1.0\" indent=\"no\"/>" +
            "<xsl:template match=\"*\">" +
            "<xsl:element name=\"{local-name()}\">" +
            "<xsl:for-each select=\"@*\">" +
            "<xsl:attribute name=\"{local-name()}\">" +
            "<xsl:value-of select=\".\"/>" +
            "</xsl:attribute>" +
            "</xsl:for-each>" +
            "<xsl:apply-templates/>" +
            "</xsl:element>" +
            "</xsl:template>" +
            "</xsl:stylesheet>";

    StreamSource xslSource = new StreamSource(new StringReader(stylesheet));
    Transformer transformer = tf.newTransformer(xslSource);
1 голос
/ 19 июня 2011

Это зависит от того, что вы имеете в виду. Когда XML-документ имеет xmlns, это действительно сокращение имен элементов; например если xmlns равен "http://example.com/#"", тогда истинное имя элемента для

    <foo attr="xxx">...</foo>

- это http://example.com/#foo, который вы бы написали без xmlns как

    <http://example.com/#foo attr="xxx">...</http://example.com/#foo>

Если вы хотите, чтобы ваш выходной XML выглядел так, то можно добиться этого, изменив параметры средства записи XML.

Если вы хотите, чтобы ваш выходной XML выглядел как оригинал, но без xmlns, вы на самом деле изменили значение XML. Чистый способ сделать это - использовать XSL-трансформатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...