2012-09-06 32 views
0

我非常新到XPath和我在用於檢索多個元素用於以下的xmlcreaing xpath表達式爲下面的XML

<ol> 
<li> 
    <a data- key="abc(/parent)" value="superval)">Parent</a> 
    <ol> 
    <li> 
     <a data-key="abc(/parent/1)" data-value="parent-val">Parent/1</a> 
     <ol> 
     <li> 
      <a data-key="abc(/parent/1/1)" data-value="xyz">Parent/1/1</a> 
     </li> 
     <li> 
      <a data-key="abc(/parent/1/2)" data-value="xyz">Parent/1/2</a> 
     </li> 
     <li> 
      <a data-key="abc(/parent/1/3)" data-value="xyz">Parent/1/3</a> 
     </li> 
     <li> 
      <a data-key="abc(/parent/1/4)" data-value="xyz">Parent/1/4</a> 
     </li> 
    </ol> 
    </li> 
</ol> 
</li> 
<li> 
    <a data-key="bcd/(parent1)" value="superval">Parent1</a> 
<ol> 
    <li> 
     <a data-key="bcd(/parent1/1)" data-value="parent-val">Parent1/1</a> 
     <ol> 
     <li> 
      <a data-key="bcd(/parent1/1/1)" data-value="xyz">Parent1/1/1</a> 
     </li> 
     <li> 
      <a data-key="bcd(/parent1/1/2)" data-value="xyz">Parent1/1/2</a> 
     </li> 
    <li> 
      <a data-key="bcd(/parent1/1/3)" data-value="xyz">Parent1/1/3</a> 
     </li> 
     <li> 
      <a data-key="bcd(/parent1/1/4)" data-value="xyz">Parent1/1/4</a> 
     </li> 
    </ol> 
    </li> 
</ol> 
</li> 
</ol> 

上面的XML創建XPath表達式的過程僅僅是一個例如,每個父代可以包含多個子值。我需要搜索數據鍵值從say(parent/1/1/1)到(parent/1/1/4)開始的元素,並且爲這些鍵提取與其關聯的屬性value的值。數據密鑰值也可跨越不同的父母,如(parent/1/1/1)至(parent/1/1/2)。

我需要爲以上兩種情況創建XPath表達式。我已經使用這個XPath表達式

//*[@data-key='abc(/parent/1/1/1)'] 

嘗試,但它只是給了我一個<a>元素,在這裏我需要一個元素的範圍。我對XPath完全陌生,所以在這方面的任何幫助都會有用。

非常感謝提前。 Asheesh

+0

您想從哪種編程語言或系統中使用XPath來處理此XML? –

+0

我使用的是C++,我使用libXML庫來解析這個XML。 – ash1977

回答

0

嘗試使用含有()函數,你正在尋找的範圍,就像這樣:

//*[contains(@data-key,'abc(/parent/1/1/)')] 

這會給你與至少具有根數據鍵的所有節點,比如你的(父母/ 1/1/1)到(父母/ 1/1/4)的例子。雖然您提供的xml片段不包含該範圍的數據鍵,但您可以將斜槓/數字編輯爲您想要的值。