2012-02-07 128 views
4

我有下面的XML代碼,我試圖使用XLST轉換:有多個條件計數XML元素

<setting> 
    <type>house</type> 
    <context>roof</context> 
    <value>blue</value> 
</setting> 
<setting> 
    <type>house</type> 
    <context>kitchen</context> 
    <value>red</value> 
</setting> 
<setting> 
    <type>house</type> 
    <context>floor</context> 
    <value>black</value> 
</setting> 
<setting> 
    <type>apartment</type> 
    <context>roof</context> 
    <value>red</value> 
</setting> 

我想算的設置 - >鍵入「公寓」是否具有「上下文 - >樓」。

我試圖做到這一點:

<xsl:if test="count(setting[type='apartment'] and setting[context='floor']) &lt; 1"> 
    <!-- do what ever !--> 
</xsl:if> 

,但它似乎並沒有工作。我得到一個關於嘗試將數字轉換爲布爾值的例外情況?有什麼建議麼?

更新: 我想通了,我可以使用:

<xsl:if test="count(setting[type='apartment' and context='floor']) &lt; 1"> 

回答

2

內計數的語句返回布爾值,這是不正確的。 count()要求節點集能夠對節點進行計數。如果這是需要有與所需的值類型和公寓房的元素相同的設置元素你可能看:

count(setting[type='apartment' and context='floor']) &lt; 1 

否則,如果您需要具有類型=公寓或上下文=地板設置元素的總和(具有與所需的值這兩個元素排除計數設置),你可能需要:

count(setting[type='apartment'] | setting[context='floor']) &lt; 1 
0

如何使用級聯謂詞像這樣?:

count(setting[type='apartment'][context='floor']) &lt; 1