2017-08-09 6 views
0

問題があります。
私は最初のXML持っている:私は今使用しているXSLTスタイルシートがあるネストされたコードをxmlからxmlにマージしてXSLT

<?xml version = '1.0' encoding = 'UTF-8'?> 
    <groups> 
     <group number="1"/> 
     <group number="2"/> 
     <group number="3"/> 
    </groups> 

:よう

私はそれになりたいXSLTを使用した
<?xml version = '1.0' encoding = 'UTF-8'?> 
<groups> 
    <group> 
     <number>1</number> 
    </group> 
    <group> 
     <number>2</number> 
    </group> 
    <group> 
     <number>3</number> 
    </group> 
</groups> 

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:strip-space elements="*"/> 
<xsl:output method="xml" indent="yes"/> 
<xsl:template match="groups"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="number"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 

しかし、それは単に "グループ"フィールドを削除します。助けが必要!あなたが入力と出力でノード名と構造がを変換アイデンティティを開始することができ、事前

+1

参照:https://www.w3.org/TR/xslt/#creating-attributesとhttps://www.w3.org/TR/xslt /#属性値テンプレート。 –

答えて

0


おかげで、非常に近いです。これは入力XMLをそのまま出力にコピーします。

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

次のステップは、<group>ノードの属性として<number>ノードを変換することです。テンプレートはgroup/numberのノードと一致するように作成されます。

<xsl:template match="group/number"> 

このテンプレート内では、コメントに記載されているとおり、<xsl:attribute>を定義する必要があります。この場合、属性名は現在のノード名と一致するので、local-name(){}の範囲内で使用されます。属性の値は現在の<number>ノードの値です。

<xsl:attribute name="{local-name()}"> 
    <xsl:value-of select="." /> 
</xsl:attribute> 

以下は、入力XMLを目的の出力に変換する完全なXSLTです。

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:strip-space elements="*" /> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="group/number"> 
     <xsl:attribute name="{local-name()}"> 
      <xsl:value-of select="." /> 
     </xsl:attribute> 
    </xsl:template> 
</xsl:stylesheet> 

出力

<groups> 
    <group number="1" /> 
    <group number="2" /> 
    <group number="3" /> 
</groups> 
+0

あなたは最高です!このような明確な説明をありがとう! –

関連する問題