2017-01-24 9 views
0

が含まれている、それは次のように条件チェックを行うことが可能です:ノードが次の文字列を持っている場合XSLTはない、XSLTで複数の文字列

<xsl:if test='node != contains("Apple, Banana, Carrot")'>..</xsl> 

だから、それがリストに表示しません。 contains(..)文字列が動的に作成されます。例えば

...

XML が含まれてい

<?xml version="1.0"?> 
<list> 
    <node>Apple</node> 
    <node>Banana</node> 
    <node>Carrot</node> 
    <node>Dog</node> 
    <node>Elephant</node> 
    <node>Fox</node> 
    <node>Golf</node> 
</list> 

( "<%スクリプト%>") - コードは、ここでは動作しません申し訳ありません。しかし、カンマで区切られた文字列を追加するだけです。

+0

あなたの質問はまだ明らかではありません。この「カンマで区切られた文字列」はどこから来ますか?スタイルシートでハードコーディングできますか?はいの場合は、コンマで区切られた文字列の形式で、表現された式の形式ではないのはどうしてですか? –

+0

確かに可能ですが、要件をより明確に表現する必要があります。作成された構文を使用してあなたが望むものを私たちに教えようとするのは、良い仕様のテクニックではありません。 「ノードのセットに次の文字列が含まれていない場合」または「ノードのセットに次の文字列がすべて含まれていない場合」、あるいはまったく異なるものを意味しますか? –

答えて

2

使用する3つの述語:

は、キーワードファイルkeyword.xml命名:あなたの更新質問を参照

<xsl:if test="contains(text(),'Apple')) or contains(text(),'Banana')) or contains(text(),'Carrot'))">..</xsl> 

<?xml version="1.0"?> 
<list> 
    <node>Apple</node> 
    <node>Banana</node> 
    <node>Carrot</node> 
    <node>Dog</node> 
    <node>Elephant</node> 
    <node>Fox</node> 
    <node>Golf</node> 
</list> 

と任意のデータテストファイルをdata.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Data> 
    <a>Apple</a> 
    <b>Carrot</b> 
    <c>Crap</c> 
</Data> 

次のXSLTを使用して目的のノードを取得することができます。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:variable name="inc" select="document('keyword.xml')/list" /> 

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

    <xsl:template match="*"> 
    <xsl:value-of select="name()" />  <!-- only for debugging/output purposes --> 
    <xsl:variable name="cur" select="text()" /> 
    <xsl:if test="$inc/node/text()[contains(., $cur)]">..</xsl:if> 
    </xsl:template> 

</xsl:stylesheet> 

不可欠式は<xsl:variable...>式で保存された現在のtext()ノードが含まれているかどうかを確認する

$inc/node/text()[contains(., $cur)] 

ですkeyword.xmlファイルのlist/node/text()にあります。

だから、このテストケースでは、出力は次のようになります。

<?xml version="1.0"?> 

    a.. 
    b.. 
    c 
+0

uhm..not SIR @ zx485を含む文字列は動的に読み込まれます。可能であれば、それ以上の文字列を追加することが可能です – mrrsb

+0

@mrrsb:私はあなたに何を求めているのか分かりません。 – zx485

+0

@mrrsbあなたの質問を編集し、「動的」文字列のソースを含む**完全な例を提供してください:[mcve]を参照してください。 –