2011-03-21 85 views
1
<categories> 
<member> 
    <name> Ants </name> 
    <size> 8 </size> 
    <submember> 
     <structure> 
      <name>Acrobat Ants </name> 
      <size>Slightly over 1/8" </size> 
      <color>Tan, red with heart shaped abdomen </color> 
      <habitat>Inside moist wood</habitat> 
      <found>Throughout the US</found> 
      <desc></desc> 
      <productLink> </productLink> 
     </structure> 

     <structure> 
      <name>Argentine Ant </name> 
      <size>About 1/16" </size> 
      <color>Light to dark brown </color> 
      <habitat>Shallow areas with moist soil</habitat> 
      <origin>Argentina and Brazil</origin> 
      <desc></desc> 
      <productLink></productLink> 
     </structure>  

     <structure> 
      <name>Carpenter Ants </name> 
      <size>1/4-1/2" </size> 
      <color>Varies</color> 
      <Habitat>Inside decayed or moist wood</Habitat> 
      <Found>Throughout the US</Found> 
      <desc>C</desc> 
      <productLink></productLink> 
     </structure> 
    </submember> 
</member> 
</categories> 

比方說,我有這樣一個XML文件(實際的XML是更長的時間比這個),那麼我如何才能「螞蟻」結構使用XPath?XML的XPath問題

+0

好問題,+1。查看我的答案,瞭解兩個選擇所需節點的XPath表達式。 :) – 2011-03-21 13:35:15

回答

4

我猜你想它包含AntsNamemember。這應該是足夠了:

/categories/member[name=' Ants '] 

注意引號包含所需的名稱空間。空格在XML中很重要,因此Ants附近的空格也是內容的一部分。否則,可以先對空格進行規範化,然後再進行比較,從而有效地修剪過多的空白。

/categories/member[normalize-space(name)='Ants'] 

由於亞歷所指出的,您可能希望Ants元素下的structure後裔。那麼你需要進一步挖掘。

/categories/member[normalize-space(name)='Ants']/submember/structure 
+0

M:這會選擇'member'元素,而不是'structure'元素 – 2011-03-21 20:34:28

+0

@Ajjandro:這就是我以爲他想要的。我不清楚他想要什麼元素。但是現在你指出了這一點,我想他會想要'結構'元素。我最初的讀法是:「我想要那種具有'螞蟻'名字的東西,我不知道該怎麼稱呼它,但它就像一個結構。」我沒有意識到有些元素被命名爲「結構」,我只關心'螞蟻'的名字。 :) – 2011-03-21 21:34:51

0

這是幾個擴展@傑夫的(好)答案。這種瞄準​​下的所有<structure>元素的名稱包含Ants(佔前/後間隔):

/categories/member[normalize-space(name)='Ants']/submember/structure 

或者只是第一個:

/categories/member[normalize-space(name)='Ants']/submember/structure[1] 

只是Carpenter Ants

/categories/member[normalize-space(name)='Ants']/submember/structure[normalize-space(name)='Carpenter Ants'] 

依此類推...

你應該嘗試將這些概括爲自己的用途。

+0

+1更好的答案。 – 2011-03-21 20:33:48

1

比方說,我有這樣 一個XML文件(實際的XML比 這更長的時間),那麼我如何才能「螞蟻」 結構使用XPath?

我猜你要選擇任何structure與孩子name,其字符串值包含字符串「螞蟻」。

使用

/*/*/*/structure[contains(name, 'Ants')] 

這裏選擇有一個孩子name包含字符串「螞蟻」,並且(在sructure元素)是任何元素的孩子是一個孩子的任何structure元素任何XML文檔頂部元素的子元素。

或者,使用

/*/*/*/structure[contains(concat(name,' '), ' Ants ')] 

這將選擇一個structure元素satidfy所有要求,在以前的表達,不同的是它的name孩子必須包含前面有一個空格的「螞蟻」,要麼後跟一個空格或作爲完整字符串值name的結束子字符串。