2011-12-15 61 views
5

我用下面的(次優)XML工作:使用XPath數()與包括()

<a> 
    <b> 
    <c>X:1 Y:0</c> 
    <c>X:1 Y:0</c> 
    <c>X:2 Y:0</c> 
    </b> 
    <b> 
    <c>X:1 Y:0</c> 
    <c>X:2 Y:0</c> 
    </b> 
</a> 

我試圖使用XPath來算<c>節點,其內容包含X:1數量:

count(contains(/a/b/c, 'X:1')) 

但是,這返回一個錯誤,而不是返回預期的計數3

我在做什麼錯?

+1

這是那些情況下,我會傾向於一個建議使用將這些元素展開爲'`的樣式表對XML進行預處理,然後像這樣處理數據就變得微不足道了。如果這只是一次性的任務,那麼這可能是不值得的,但如果這是你必須做的事情,那麼首先考慮將數據變成更有用的形式是絕對值得的。 – Flynn1179 2011-12-15 12:52:45

回答

8

這不是你如何使用。嘗試

count(/a/b/c[contains(., 'X:1')]) 
+0

工作完美,謝謝! – gjb 2011-12-15 09:17:33

+0

@gjb,@Phil更多類似:「這不是你如何使用`計數()'」,因爲問題是`計數()`需要設置參數的節點,但'包含()`返回一個布爾值。 – jasso 2011-12-15 17:19:21

3

也許一點點更有效(如果提供的XML文檔中表現出的特性並非偶然):

count(/a/b/c[starts-with(., 'X:1')])