布尔运算符OR在where子句中使用XSLT

时间:2012-07-23 17:44:05

标签: xslt

大家好,             我试图在与条件中的值进行比较时为XML中的标记设置固定值。比如

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

当我尝试使用标记为<TestInput>的XML运行转换时,它会给我一个错误

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

请使用where子句中的OR运算符帮助我根据条件设置此标记的值。

先谢谢

3 个答案:

答案 0 :(得分:10)

案例与XML / XSLT / XPath有关,因此请使用or代替OR

答案 1 :(得分:2)

我使用以下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类进行测试。关键区别在于'语句的 case

答案 2 :(得分:0)

问题在于// TestInput选择一组元素而不是一个元素。

您应该使用xsl:for-each

<xsl:for-each select="//TestInput[.='a'or'b'or'c']">abc</xsl:for-each>