2012-07-23 68 views
2

你好, 我试图在XML中设置一个固定的值来与条件中的值进行比较。如布尔操作符OR在where子句中使用XSLT

<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运算符。

由于提前

+0

? – dash 2012-07-23 17:55:18

回答

7

案例与XML/XSLT/XPath的事项所以使用or代替OR

+0

确实如此。谢谢Martin – user1541472 2012-07-23 18:08:20

+2

作为附加说明,使用XSLT/XPath 2.0,您可以简化与'// TestInput =('foo','bar','foobar')'的比较。然而这对于XSLT/XPath 1.0来说是不可能的。 – 2012-07-23 18:09:57

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类。关键区别在于''声明的情况

+0

事实确实如此。短跑,谢谢 – user1541472 2012-07-23 18:09:03

0

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

您应该使用的xsl:for-每个

<xsl:for-each select="//TestInput[.='a'or'b'or'c']">abc</xsl:for-each> 
您正在使用什么平台/分析器
+4

'// TestInput [。='a'or'b'or'c']'不正确的XPath。它评估为//TestInput[.='a'or true()或true()]',因此最终总是“真”。你必须做实际的比较。 – Tomalak 2012-07-23 18:03:03