使用XSLT的布尔运算符或where子句

使用XSLT的布尔运算符或where子句,xslt,Xslt,大家好, 我试图在比较条件中的值时为XML中的标记设置一个固定值。比如 <xsl:when test="(//TestInput='XYZA') OR (//TestInput='XYZB') OR (//TestInput='XYZC') OR (//TestInput='XYZD')">abcd</xsl:when> 请帮助我根据where子句中使用OR运算符的条件设置此标记的值 提前感谢案例与XML/XSLT/XPath有关,因此请使用或而不是或我使用以下XML创

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

<xsl:when test="(//TestInput='XYZA') OR (//TestInput='XYZB') OR (//TestInput='XYZC') OR (//TestInput='XYZD')">abcd</xsl:when>
请帮助我根据where子句中使用OR运算符的条件设置此标记的值


提前感谢

案例与XML/XSLT/XPath有关,因此请使用
而不是
我使用以下XML创建了一个测试:

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

数模转换器
数据自动处理文摘
DAE
以及以下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类进行测试。关键区别在于'or'语句的大小写。

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

您应该为每个应用程序使用xsl:for

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

您使用的是什么平台/解析器?
//TestInput[.='a'或'b'或'c']
是不正确的XPath。它的计算结果为
//TestInput[.='a'或true()或true()]
,因此最后总是
true
。您必须进行实际的比较。另外,使用XSLT/XPath 2.0,您可以将这种比较简化为
//TestInput=('foo','bar','foobar')
。但是,这在XSLT/XPath1.0中是不可能的。
<xsl:for-each select="//TestInput[.='a'or'b'or'c']">abc</xsl:for-each>