2017-11-28 20 views
0

私のXSL変換中に、ContextID = "de_DE"のタグをすべて削除したいと思います。XSLTを使用してXML要素内の特定の値を削除しますか?

<Values>  
<Value AttributeID="TEST" ContextID="de_DE" QualifierID="de">1234</Value>   
<Value AttributeID="TEST" ContextID="fr_FR" QualifierID="fr">1234</Value>   
<Value AttributeID="TEST100" ContextID="de_DE" QualifierID="de">abcd</Value>   
<Value AttributeID="TEST100" ContextID="fr_FR" QualifierID="fr">abcd</Value>   
</Values> 

になるだろう:これは、次のXMLがあることを意味

<Values>   
<Value AttributeID="TEST" ContextID="fr_FR" QualifierID="fr">1234</Value> 
<Value AttributeID="TEST100" ContextID="fr_FR" QualifierID="fr">abcd</Value>   
</Values> 

がどのように私はこれを達成できますか?

ありがとうございます!

答えて

0

XSLTには「削除」という概念はありません。ノードを照合して何もしないことで、入力文書からノードを除外します。 XSLTプロセッサは特異性の概念を持っているため、より具体的なテンプレートは、あまり具体的でないものを上書きします。

のような何か:

<!-- Matches all Value elements and copies them verbatim --> 
<xsl:template match="Value"> 
    <xsl:copy/> 
</xsl:template> 

<!-- Matches all Value elements whose ContextID is 'de_DE' in preference to the less-specific template, and does nothing --> 
<xsl:template match="Value[@ContextID='de_DE']"/> 
+0

XSL '浅いコピー:これらの要素を削除するための空のテンプレートが他のテンプレートが細かいながらのポスターがそう望んでいるようcopy'は、その属性を持つ要素をコピーしません。改善されるべきか、あるいは単純に恒等変換テンプレートによって置換されることになる。 –

+0

@MartinHonnen oops、よく斑点がついた。はい、OPに既にアイデンティティトランスフーミングが設定されていると仮定すると、 ''が好ましいでしょう。 –

関連する問題