1

PHP では、次のようにします。

 $values =explode(',',"A,B,C,D");
 if(in_array($value,$values)){
  // Do sthing 
 }

XSLT で同様のことを行うにはどうすればよいでしょうか。コマンドラインからパラメーターとして提供される $commaSepartedString に属性 @x を持つ xml ファイルからすべてのノードを選択する必要があります

<xsl:for-each select="table[@name in $commaSeparatedString]">


</xsl:for-each> 

編集

オプションで、デフォルト値をパラメータに設定してすべてのノードを含めたい

<xsl:param name="commaSeparatedString" select="'*'"/>

したがって、regxのようなものがより適しているようです

ありがとう

4

4 に答える 4

2

XSLT 2.0 では、私も使用しますが、 sufficestokenizeを使用した簡単な比較を行います。=

<xsl:for-each select="table[@name = tokenize('A,B,C,D,E', ',')]">...</xsl:for-each>
于 2013-01-31T12:33:46.603 に答える
1

XSLT 2.0の使用

table[$commaSeparatedString eq '*'
     or @name = tokenize($commaSeparatedString, ',')
     ]
于 2013-02-01T03:42:52.970 に答える
1

これを行うことができるはずです:

<xsl:for-each 
   select="table[contains(concat(',', $commaSeparatedString, ','), 
                          concat(',', @name, ',')
                          )]">


</xsl:for-each> 
于 2013-01-31T10:47:13.230 に答える
0

XSLT2.0 を使用している場合は、トークン化機能を利用できます。

<xsl:variable name="tokenizedValues" select="tokenize($values,',')"/>

これにより、カンマ区切りの文字列が値のリストに分割されます。次に、 name属性がリストにあったことを確認して、テーブル要素を探すことができます

<xsl:apply-templates select="table[index-of($tokenizedValues,@name)]"/>

たとえば、次の XML について考えてみます。

<tables>
<table name="A">1</table>
<table name="B">2</table>
<table name="C">3</table>
<table name="D">4</table>
<table name="E">5</table>
</tables>

以下の XSLT を使用する場合

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/*">
      <xsl:variable name="values">A,B,C,D</xsl:variable>
      <xsl:variable name="tokenizedValues" select="tokenize($values,',')"/>

      <xsl:apply-templates select="table[index-of($tokenizedValues,@name)]"/>
   </xsl:template>

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

次に、以下が出力されます

<table name="A">1</table>
<table name="B">2</table>
<table name="C">3</table>
<table name="D">4</table>
于 2013-01-31T12:00:47.030 に答える