2012-07-23 64 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