2017-08-21 16 views
0

目的は、XSLTを使用して同じ名前のネストされたXML要素タグを変更することです。私は数字やその他の方法を使ってみました。私は希望の結果を得ることができませんでした。XSLTを使用してネストされたXML要素タグを同じ名前で変更する

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<x> 
    <y> 
     <z value="john" designation="manager"> 
      <z value="mike" designation="associate"></z> 
      <z value="dave" designation="associate"></z> 
     </z> 
    </y> 
</x> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<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="*" /> 

    <xsl:template match="x"> 
    <xsl:text> 
</xsl:text> 
     <employees> 
      <xsl:apply-templates /> 
     </employees>  
    </xsl:template> 

    <xsl:template match="y"> 
     <employee> 
      <xsl:apply-templates /> 
     </employee> 
    </xsl:template> 

    <xsl:template match="//x[y/z/@value='john' and y/z/@value='mike' and y/z/@value='dave']"> 
      <xsl:element name="{@designation}"> 
      <xsl:value-of select="@value"/> 
      </xsl:element>  
    </xsl:template> 

望ましい結果:

<?xml version="1.0" encoding="UTF-8"?> 
<employees> 
    <employee> 
     <manager>john 
      <associate>mike</associate> 
      <associate>dave</associate> 
     </manager> 
    </employee> 
</employees> 

答えて

0

あなたprevious questionと同じソリューションを使用してください - ちょうど再帰的にネストされたz要素を処理するためにxsl:apply-templates命令を追加します。

XSLT

<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="*"/> 

<xsl:template match="x"> 
    <employees> 
     <xsl:apply-templates /> 
    </employees> 
</xsl:template> 

<xsl:template match="y"> 
    <employee> 
     <xsl:apply-templates /> 
    </employee> 
</xsl:template> 

<xsl:template match="z"> 
    <xsl:element name="{@designation}"> 
     <xsl:value-of select="@value"/> 
     <xsl:apply-templates /> 
    </xsl:element> 
</xsl:template> 

</xsl:stylesheet> 
+0

1.0はあなたにマイケルをありがとう、しかし、私の目標は、マネージャのタグが関連付けタグを囲むことです。 – Kenny

+0

@Kennyはい、階層は保持されます。インデント(またはその欠如)があなたを混乱させないようにしてください。 –

+0

私はこれをテストし、何らかの理由でマネージャー名の後にマネージャータグが閉じられました。 – Kenny

関連する問題