2017-02-21 15 views
0

段落の子要素<version>に含まれる属性に応じて、特定の親ノード(およびその子孫)を削除する必要があります。したがって、以下の例では、<version version="ABCD">のインスタンスを見つけて、親の<para0>要素からすべてを削除するためにXSLTが必要です。言い換えれば、私は条件付きテキストフィルタリングを達成しようとしています。私が一致させる必要がある要素(と削除する)は常に<applic>の親になりますが、例のように常に<para0>であるとは限りません。だから、何らかの方法で 'applic'要素の親要素と一致する必要があることを指定する必要があります明示的にpara0を指定します。C#XSLT子ノードの属性に基づいて親ノードを削除します

この例からはっきりしているはずです。バージョン属性がABCDのすべてのpara0データを削除する必要があります。

だから、これはいくつかのサンプルXMLここ

<root> 
    <para0> 
    <applic> 
     <model> 
     <version version="ABCD"></version> 
     </model> 
    </applic> 
     <subpara1><title>First Title</title> 
      <para>Some text relating to ABCD configuration</para> 
     </subpara1> 
     <subpara1><title>Second Title</title> 
      <para>Some other text and stuff relating to ABCD configuration</para> 
     </subpara1> 
    </para0> 
    <para0> 
    <applic> 
     <model> 
     <version version="TRAINING"></version> 
     </model> 
    </applic> 
     <subpara1><title>First Title</title> 
      <para>Some text relating to TRAINING configuration</para> 
     </subpara1> 
     <subpara1><title>Second Title</title> 
      <para>Some other text and stuff relating to TRAINING configuration</para> 
     </subpara1> 
    </para0> 
</root> 

は私がこれまで持っていますが、私はそれを必要とし、一度ABCDにマッチした、基本的に「APPLIC」の親を選択して削除すると、すべてのXSLTです子ノード。

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

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

     <xsl:template match = "//applic/model[@*]/version[@version='ABCD']" /> 

     </xsl:stylesheet> 
+0

の可能性のある重複(http://stackoverflow.com/questions/1550981/how-to [XPathの中で "ない" を使用する方法?] -use-not-in-xpath) –

答えて

0

"削除"テンプレートは削除する要素と一致する必要があります。子孫の1つではありません。

試してみてください。

XSLT 1.0

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

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

<xsl:template match="*[applic/model/version/@version='ABCD']" /> 

</xsl:stylesheet> 
+0

ありがとうございますが、必ずしも一致する「para0」であるとは限りません。 「appic」タグの後に続く要素はいくつでも構いません。だから私は、特に 'para0'ではなく、未知の要素を削除する必要があります。 –

+0

さて、どうですか? –

+0

ありがとうございました。 –

関連する問題