2016-05-12 10 views
0

私は、与えられた値が値のリストに含まれているかどうかをテストするXSLT変換の例を持っています。構文は次のとおりです。(set)構文のXSLT値はXSLT標準の一部ですか?

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/> 

    <xsl:template match="field"> 
     <FIELD> 
      <xsl:choose> 
       <xsl:when test="current() = ('v1', 'val1')"> 
        YES 
       </xsl:when> 
       <xsl:when test="current() = ('v2', 'val2')"> 
        NO 
       </xsl:when> 
       <xsl:otherwise> 
        UNKNOWN 
       </xsl:otherwise> 
      </xsl:choose> 
     </FIELD> 
    </xsl:template> 

</xsl:stylesheet>  

テストXML:

<?xml version="1.0" encoding="iso-8859-1"?> 
<doc> 
    <field>v1</field> 
    <field>val2</field> 
    <field>v3</field> 
</doc> 

オンラインXSLTテストツールが正しく処理されますが、例えば、IntelliJのは、叫んさ:

を[エラー: 'current()=(' v1 '、' val1 ')'の構文エラー '

フィンに問題があります標準的なXSLTチュートリアルやStackOverflowなどで、(xsltの設定構文)、(xsltの値)などのフレーズを使用して、インターネット上のこの特定の構文の例を示します。

構文は正確で標準に準拠しているか、半公式の拡張?

答えて

1

あなたが表示する内容は、XSLT 2.0の構文です。このエラーは、XSLT 1.0プロセッサでこれを実行することによって発生する可能性があります。

あなたは使用することができます。

<xsl:value-of select="system-property('xsl:version')"/> 

は、あなたのプロセッサがサポートするXSLTバージョンを確認します。

+0

ありがとうございました。 IntelliJがXSLTバージョン1.0を使用しているようです。それにもかかわらず、私の構文が2.0の一部である場合、それを使っている例を見つけるのがなぜ難しいのですか? –

+0

@ 9ilsdx9rvj0lo例題はhttps://www.w3.org/TR/xpath20/#id-general-comparisonsにあります。または、「配列比較」を検索してください。ここで私は非常に迅速に見つけたものがあります:http://stackoverflow.com/a/6357859/3016153 –

+0

キーは私の検索で使用していないフレーズ 'シーケンス比較'です、私の質問は単に重複しているようです。 –

関連する問題