2011-03-02 32 views
3

在xsl中,我們可以在循環「for each」中寫入兩個條件。例如,而不是xsl:for-each select =:兩個條件

<xsl:when test="/document/line[ 
        (substring(field[@id='0'], 1,3)='MAR') 
       ] and 
       /document/line[ 
        contains(substring(field[@id='0'],123,4),'0010') 
       ]"> 

,我們可以把它寫:

<xsl:for-each select="/document/line[ 
         contains(substring(field[@id='0'], 1,3),'MAR') 
         ] and 
         /document/line[ 
         contains(substring(field[@id='0'],123,4),'0010') 
         ]"> 

問候

從評論

<xsl:for-each select="/document/line[ 
         contains(substring(field[@id='0'], 1,3),'MAR') 
         and contains(substring(field[@id='0'],123,4),'0010') 
         ]"> 
+0

也許它是正確的? – Petras 2011-03-02 08:08:41

+1

我無法測試它,但我會說在你的評論中的方法是正確的,而你的文章中的方法不是。您不能在'select'中選擇兩個XPath表達式,而您可以在XPath表達式中使用'and'運算符。 – MarcoS 2011-03-02 08:45:35

+0

第二個是正確的。感謝您的回答,我牢記在心。 – Petras 2011-03-02 09:13:02

回答

7

如果問題是更新「是有可能在for-each「a」的select屬性中檢查2個條件nswer是:。 由於

的表達式必須計算的節點集。 (從ZVON

因此,選擇的數據類型必須是節點集不是一個布爾值。

但是,如果你要選擇內的兩個節點集的xsl:for-eachxsl:template(後者是更好)等,你可以使用聯合運營(|):

<xsl:for-each select="/document/line[ 
         contains(substring(field[@id='0'], 1,3),'MAR') 
         ] | 
         /document/line[ 
         contains(substring(field[@id='0'],123,4),'0010') 
         ]"> 
+1

@Petras我還爲您的需求添加了一個可能的解決方案 – bluish 2011-03-02 09:20:24

+2

您寫道:_「是否可以檢查2個條件[答]是:**否** ._這是錯誤的。表達式必須計算爲一個節點集「_。是的,同樣請注意你的**節點設置了union **與OP意圖無關,從評論中獲得 – 2011-03-02 16:24:15

+1

@Ajjandro mhm,可以......我提到問題中的前2個代碼片段,如果需要,請編輯我的回覆。謝謝! – bluish 2011-03-02 17:13:11