我有这个xml文件。
Xml输入文件
<Node Name="A100" Id="0x1" Type="1" >
<First Name="First" Val0="0" Val1="8" Val2="3" Val3="4" Val4="8" Val5="3" Val6="4">
<Second Name="N1" Val0="7" Val1="3"/>
<Second Name="N2" Val0="0" Val1="2"/>
<Second Name="N3" Val0="NoFunction" Val1="ab"/>
<Second Name="N4" Val0="0" Val1="xy"/>
</First>
<Second Name="N5" Val="No"/>
<Second Name="N6" Val="No" />
<Second Name="N7" Val="No" />
</Node>
<Node Name="B200" Id="0x2" Type="1" >
<First Name="First" Val0="0" Val1="8" Val2="7" Val3="8" Val4="5" Val5="1" Val6="0">
<Second Name="N1" Val0="7" Val1="3"/>
<Second Name="N2" Val0="0" Val1="2"/>
<Second Name="N3" Val0="NoFunction" Val1="ab"/>
<Second Name="N4" Val0="0" Val1="xy"/>
</First>
<Second Name="N5" Val="No"/>
<Second Name="N6" Val="No" />
<Second Name="N7" Val="No" />
</Node>
我需要使用xsl转换另一个xml文件,如下所示:
Xml输出文件
<Node Name="A100" Id="0x1" Type="1" >
<First Name="First" New="A100" Val0="0" Val1="8" Val2="3" Val3="4" Val4="8" Val5="3" Val6="4">
<Second Name="N1" Val0="7" Val1="3"/>
<Second Name="N2" Val0="0" Val1="2"/>
<Second Name="N3" Val0="NoFunction" Val1="ab"/>
<Second Name="N4" Val0="0" Val1="xy"/>
</First>
<Second Name="N5" Val="No"/>
<Second Name="N6" Val="No" />
<Second Name="N7" Val="No" />
</Node>
<Node Name="B200" Id="0x2" Type="1" >
<First Name="First" New="B200" Val0="0" Val1="8" Val2="7" Val3="8" Val4="5" Val5="1" Val6="0">
<Second Name="N1" Val0="7" Val1="3"/>
<Second Name="N2" Val0="0" Val1="2"/>
<Second Name="N3" Val0="NoFunction" Val1="ab"/>
<Second Name="N4" Val0="0" Val1="xy"/>
</First>
<Second Name="N5" Val="No"/>
<Second Name="N6" Val="No" />
<Second Name="N7" Val="No" />
</Node>
我希望Node的名称首先像New = @ Name of Node。 谁能帮我这个?谢谢
答案 0 :(得分:1)
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
这将满足您希望复制的所有节点和属性不变。然后,您只需要一个与First
元素匹配的模板,并为其添加新属性......
<xsl:template match="First">
<First New="{../@Name}">
注意使用花括号,表示Attribute Value Template,因此将被评估为表达式,而不是按字面输出。
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="First">
<First New="{../@Name}">
<xsl:apply-templates select="@*|node()"/>
</First>
</xsl:template>
</xsl:stylesheet>