2017-01-17 42 views
0

我有這個xml文件。如何將父節點的名稱添加到第一個子xsl?

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> 

我想節點的名稱在第一個像New = @節點名稱。 任何人都可以幫助我嗎?謝謝

+0

您是否嘗試過任何樣品至今XSLT的?使用XSLT-1.0或XSLT-2.0? –

回答

1

你應該瞭解XSLT Identity Template

<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> 
+0

這很好。非常感謝您提供的信息 – userTee

相關問題