使用XSLT的布尔运算符或where子句
大家好, 我试图在比较条件中的值时为XML中的标记设置一个固定值。比如使用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创
<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>