2012-05-08 13 views
0

ノードを親ノードから子ノードにコピーしたい。私はこれがどのように達成されるのか本当に確信していません。XSLT子ノード親ノードからコピー

マイソースXML

<Root1> 
    <Family1> 
     <Childrens> 
     <Child> 
      <ChildFirstName>Robin1</ChildFirstName> 
      <ChildLastName>Jackman1</ChildLastName> 
      <Address> 
      <Street1>Street1</Street1> 
      <State>State</State> 
      <Country>Country</Country> 
      </Address> 
      <Activities> 
      <Sports> 
       <Cricket> 
       <ParticipentNames> 

       </ParticipentNames> 
       </Cricket> 
      </Sports> 
      </Activities> 
     </Child> 
     <Child> 
      <ChildFirstName>Robin2</ChildFirstName> 
      <ChildLastName>Jackman2</ChildLastName> 
      <Address> 
      <Street1>Street1</Street1> 
      <State>State</State> 
      <Country>Country</Country> 
      </Address> 
      <Activities> 
      <Sports> 
       <Cricket> 
       <ParticipentNames> 

       </ParticipentNames> 
       </Cricket> 
      </Sports> 
      </Activities> 
     </Child> 
     <Child> 
      <ChildFirstName>Robin3</ChildFirstName> 
      <ChildLastName>Jackman3</ChildLastName> 
      <Address> 
      <Street1>Street1</Street1> 
      <State>State</State> 
      <Country>Country</Country> 
      </Address> 
      <Activities> 
      <Sports> 
       <Cricket> 
       <ParticipentNames> 

       </ParticipentNames> 
       </Cricket> 
      </Sports> 
      </Activities> 
     </Child> 
     </Childrens> 
    </Family1> 
    </Root1> 

私は

<Root1> 
    <Family1> 
     <Childrens> 
     <Child> 
      <ChildFirstName>Robin1</ChildFirstName> 
      <ChildLastName>Jackman1</ChildLastName> 
      <Address> 
      <Street1>Street1</Street1> 
      <State>State</State> 
      <Country>Country</Country> 
      </Address> 
      <Activities> 
      <Sports> 
       <Cricket> 
       <ParticipentNames> 
        <ChildFirstName>Robin1</ChildFirstName> 
        <ChildLastName>Jackman1</ChildLastName> 
        <Address> 
        <Street1>Street1</Street1> 
        <State>State</State> 
        <Country>Country</Country> 
        </Address> 
       </ParticipentNames> 
       </Cricket> 
      </Sports> 
      </Activities> 
     </Child> 
     <Child> 
      <ChildFirstName>Robin2</ChildFirstName> 
      <ChildLastName>Jackman2</ChildLastName> 
      <Address> 
      <Street1>Street1</Street1> 
      <State>State</State> 
      <Country>Country</Country> 
      </Address> 
      <Activities> 
      <Sports> 
       <Cricket> 
       <ParticipentNames> 
        <ChildFirstName>Robin2</ChildFirstName> 
        <ChildLastName>Jackman2</ChildLastName> 
        <Address> 
        <Street1>Street1</Street1> 
        <State>State</State> 
        <Country>Country</Country> 
        </Address> 
       </ParticipentNames> 
       </Cricket> 
      </Sports> 
      </Activities> 
     </Child> 
     <Child> 
      <ChildFirstName>Robin3</ChildFirstName> 
      <ChildLastName>Jackman3</ChildLastName> 
      <Address> 
      <Street1>Street1</Street1> 
      <State>State</State> 
      <Country>Country</Country> 
      </Address> 
      <Activities> 
      <Sports> 
       <Cricket> 
       <ParticipentNames> 
        <ChildFirstName>Robin3</ChildFirstName> 
        <ChildLastName>Jackman3</ChildLastName> 
        <Address> 
        <Street1>Street1</Street1> 
        <State>State</State> 
        <Country>Country</Country> 
        </Address> 
       </ParticipentNames> 
       </Cricket> 
      </Sports> 
      </Activities> 
     </Child> 
     </Childrens> 
    </Family1> 
    </Root1> 

が、私はXSLT 1.0で解決したいと出力を取得したいと思います。

私は子ノードに

    <ChildFirstName>Robin3</ChildFirstName> 
        <ChildLastName>Jackman3</ChildLastName> 
        <Address> 
        <Street1>Street1</Street1> 
        <State>State</State> 
        <Country>Country</Country> 
        </Address> 

おかげで、これらのノードをコピーしたいです。

答えて

1
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="ParticipentNames"> 
    <xsl:copy> 
    <xsl:apply-templates select="ancestor::Child/ChildFirstName | ancestor::Child/ChildLastName | ancestor::Child/Address"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

(より良いフォーマットに<xsl:output indent="yes"/><xsl:strip-space elements="*"/>を追加したい場合があります)で十分です。

+0

ありがとうマーティン、チャンピオンのように働いた。 – KRP

関連する問題