2016-11-28 6 views
0

私はXsltの新機能で、子ノードに属性を持つXMLを1つ変換したいのですが、親に置いておきたいのですが、変数の属性値ストアを読み込もうとしましたが、役に立たないようです変数のスコープが有効xmlから子属性の値を取得し、xsltを使用して親ノードに同じ属性を追加する方法

XMLサンプルもwillnotとして:

<Parent> 
<CHILD_1> 
     <SUBCHILD ATTR="345"> 
     <element1>10</element1> 
     </SUBCHILD > 
    <CHILD_1> 
</Parent> 

私は親の属性として属性attrをputtheとchild_1からそれを削除したいです。

<xsl:template match="Parent"> 
     <xsl:copy> 
     <xsl:attribute name="ATTR" select="CHILD_1/SUBCHILD /@ATTR"/> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

これは、親ノードに属性を追加することが、この上の任意の助けが理解されるであろう子供

から属性を削除されていません。私が試した何

。削除する属性にこれを追加する

答えて

0

あなたは、具体的にのみ、ノード要素とアドレス属性を横断する必要があるトリック

<xsl:template match="@ATTR"/> 
0

を行います。これはあなたのための再帰的なテンプレート

デモによって追加される属性を排除します:http://xsltransform.net/ejivdHb/20

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns1="http://locomotive/bypass/docx" > 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="CHILD_1"> 
    <xsl:copy> 
     <xsl:attribute name="role" select="SUBCHILD/@ATTR"/> 
     <xsl:apply-templates select="node()"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 
関連する問題