2017-01-17 1 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> 

내가 노드의 이름을 원하는 처음 = 새 노드 = @ 노드 이름. 아무도 도와 줄 수 있습니까? 당신이

+0

를 시도? 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 지금까지 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

관련 문제