5

こんにちは皆さん、条件の値と比較して、XML のタグに固定値を設定しようとしています。そのような

<xsl:when test="(//TestInput='XYZA') OR (//TestInput='XYZB') OR (//TestInput='XYZC') OR (//TestInput='XYZD')">abcd</xsl:when>

タグ付きの XML で変換を実行しようとすると、次の<TestInput>ようなエラーが表示されます

Extra illegal tokens: '(', '/', '/', 'TestInput', '=', ''XYZA'', ')', 'OR', '(', '/', '/', 'TestInput', '=', ''XYZB'', ')', 'OR', '(', '/', '/', 'TestInput', '=', ''XYZC'', ')', 'OR', '(', '/', '/', 'TestInput', '=', ''XYZD'', ')'

where句でOR演算子を使用した条件に基づいて、このタグに値を設定するのを手伝ってください。

前もって感謝します

4

3 に答える 3

13

XML/XSLT/XPath では大文字と小文字が区別されるため、or代わりにOR.

于 2012-07-23T17:56:00.973 に答える
4

次の XML を使用してテストを作成しました。

<?xml version="1.0" encoding="utf-8"?>
<Test>
  <Item>DAC</Item>
  <Item>DAD</Item>
  <Item>DAE</Item>
</Test>

そして、次の XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="@* | node()">
      <test>
      <xsl:choose>
        <xsl:when test="//Item[text()='DAC'] or //Item[text()='DAE']">
          <output>Here is the text!</output>
        </xsl:when>
        <xsl:otherwise></xsl:otherwise>
      </xsl:choose>
      </test>
    </xsl:template>
</xsl:stylesheet>

次の出力が得られます。

<?xml version="1.0" encoding="utf-8"?>
<test>
  <output>Here is the text!</output>
</test>

Micorosft.Net の XmlDocument クラスでテスト済み。決定的な違いは、'または' ステートメントの場合です。

于 2012-07-23T17:57:11.490 に答える
0

問題は、//TestInput が要素を 1 つではなくセットとして選択することです。

xsl:for-each を使用する必要があります

<xsl:for-each select="//TestInput[.='a'or'b'or'c']">abc</xsl:for-each>
于 2012-07-23T17:59:48.057 に答える