Мне нужно добавить элемент после корня и один элемент после корня - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь добавить элемент после корневого элемента XML, но я не могу этого добиться.

Это то, что я до сих пор получил с XSL.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:variable name="topNode" select="name(/*)"/>
    <xsl:template match="/">
        <xsl:element name="{$topNode}">
            <xsl:copy-of select="node()"/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

Это то, с чего я должен начать.

<?xml version="1.0"?>
<order_status xmlns="myNameSpace">
    <row>
        <id>1</id>
    </row>
    <row>
        <id>2</id>
    </row>
</order_status>

Это цель.

<?xml version="1.0"?>
<order_status xmlns="myNameSpace">
    <order_status>
        <row>
            <id>1</id>
        </row>
        <row>
            <id>2</id>
        </row>
    </order_status>
</order_status>

1 Ответ

0 голосов
/ 05 июня 2019

Если вы используете xsl:element, то вам также необходимо указать пространство имен вашего "верхнего узла"

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:variable name="topNode" select="name(/*)"/>
    <xsl:variable name="topNodeNamespace" select="namespace-uri(/*)"/>
    <xsl:template match="/">
        <xsl:element name="{$topNode}" namespace="{$topNodeNamespace}">
            <xsl:copy-of select="node()"/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

В качестве альтернативы, вместо этого измените шаблон, чтобы он соответствовал корневому элементу, и используйте xsl:copyсоздать дополнительную копию (так как это также скопирует пространство имен)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/*">
        <xsl:copy>
            <xsl:copy-of select="."/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...