2010-06-27 70 views
1

這是我的一塊XML文檔:糾正這個XPath表達式請

<?xml version="1.0" encoding="UTF-8"?> 
<catalog> 
<mfVictor> 
<decal> 
    <company>Victor</company> 
    <title>Wood Horn with Blue Background</title> 
    <image> 
     <url>victor01.jpg</url> 
     <width>60</width> 
     <height>60</height> 
     <name>Wood Horn Blue Background</name> 
     <link></link> 
    </image> 
    <price>$15.00</price> 
    <instock>In Stock</instock> 
    <notes>none</notes> 
    </decal> 
</mfVictor> 
</catalog> 

我有一個生成每個「標題」元素的文本列表的功能。那麼,我希望導航到「貼花」並訪問其所有子項的每個列表項的onmousedown。到目前爲止,我有這個:

//decal[contains(.,\'"+itemName+"\')] 

其中itemName是this.innerHTML傳遞給函數。它看起來像decal被訪問,因爲在console.log中,我可以看到長度爲1的XMLobject。但我無法弄清楚如何訪問「decal」的子項或「title」的兄弟。

感謝您的閱讀。

回答

1

如果您需要根據他的頭銜,我寧願以下的XPath選擇貼花:

//decal/title[contains(.,\'"+itemName+"\')]/parent::node() 
//decal/title[contains(.,\'"+itemName+"\')]/.. 
//decal[title[contains(.,\'"+itemName+"\')]] 

選擇標題的兄弟姐妹貼花您選擇,您可以使用

//decal/title[contains(.,\'"+itemName+"\')]/following-sibling::* 

如果你想你選擇,你可以使用貼花的所有孩子(也許你需要這個)

//decal[title[contains(.,\'"+itemName+"\')]]/child::* 

或更好,如果你有完整的標題

//decal[title[text()=\'"+itemName+"\']]/child::* 

用方括號您指示解析器走路XML樹,使基於您指定的條件,但不改變上下文節點選擇。將方括號視爲橡皮筋,一旦其中包含的測試得到滿足,解析器就會恢復到起始節點並評估xpath表達式的其餘部分。前兩個例子是典型的

+0

這就解釋了它。我需要你的最後一個例子。謝謝! – Troy 2010-06-27 23:32:08

0

我覺得

這應該給你一個名爲「標題」的子節點的節點貼花包含你可能想//decal[contains(./Title,「木喇叭與藍色背景」)]文本'藍色背景木角'

要訪問標題元素的同胞,您可以選擇返回的節點的子女。 (它實際上返回貼花節點,而不是標題節點。)