我试图将节点复制到另一个父节点并更改我将获得的xml输出的根目录。
XML输入:
<root version="2">
<address>
<id>300000001</id>
<name>Test</name>
<owner>
<code>NWE</code>
</owner>
<magazin>
<id>300000001</id>
<kind>
<code>JU</code>
</kind>
<storage>
<kinds>
<code>JUc</code>
</kinds>
<capacity>5800</capacity>
</storage>
<extra>
<extra name="nr">22</extra>
</extra>
</magazin>
</address>
</root>
期望的输出:
<tag>
<root version="2">
<address>
<id>300000001</id>
<name>Test</name>
<owner>
<code>NWE</code>
</owner>
</address>
</root>
<root version="2">
<magazin>
<id>300000001</id>
<kind>
<code>JU</code>
</kind>
<storage>
<kinds>
<code>JUc</code>
</kinds>
<capacity>5800</capacity>
</storage>
<extra>
<extra name="nr">22</extra>
</extra>
</magazin>
</root>
</tag>
基本上,我想得到节点&#34; magazin&#34;将它复制到另一个&#34; root&#34;标记,与第一个标记分开,并将所有这些输出放在名为&#34; tag&#34;的标记下面。 我的XSL似乎只是复制,我希望你可以帮我弄清楚缺少什么以及如何正确使用..
当前XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="magazin">
<root version='2'>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</root>
</xsl:template>
感谢您的帮助!
答案 0 :(得分:1)
以这种方式尝试:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root">
<tag>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<xsl:copy>
<xsl:copy-of select="@* | address/magazin"/>
</xsl:copy>
</tag>
</xsl:template>
<xsl:template match="magazin"/>
</xsl:stylesheet>
这会将magazin
节点复制到root
的第二个副本中,并禁止将其复制到第一个副本中。