2010-03-31 245 views
2

如果我有像這個 -的XPath選擇特定的子元素

<Parent> 
<Image Name="a"/> 
<Image Name="b"/> 
<Child> 
    <Image Name="c"/> 
    <Image Name="d"/> 
</Child> 
<SomeElem> 
    <Image Name="h"/> 
    <Image Name="g"/> 
</SomeElem> 
<Image Name="e"/> 
</Parent> 

我要選擇除了那些內部<Child\>節點中列出的所有<Image\>節點XML樹。 目前我使用的查詢選擇所有圖像節點, - 提前

xElement.XPathSelectElements("//ns:Image", namespace); 

感謝。

回答

3

得到所有Image元素,其母公司是不是Child

//*[not(self::Child)]/Image

編輯1: 這一個下面將不會作爲Parent工作也被在此過程中,這不是一個Child選擇,並且圖像是後代中的一個(通過Child)。

你也可以得到所有 Image元素,其祖先是不是 Child

//*[not(self::Child)]//Image

編輯2: 這可能最適合所有的情況。它獲得所有不是Child的後代的所有Image節點。

//Image[not(ancestor::Child)]

+0

哈哈..愛今天的圖標:D – Anurag 2010-03-31 23:49:18

+0

不,它仍然不工作:(與/ /圖像[不(祖先::兒童)] 或與xElement.XPathSelectElements(「//* [not(self :: Child)] // ns:Image「,namespace) – Cool 2010-04-01 00:31:42

+0

xpath看起來是正確的,這裏是一個可用於測試的在線工具 - http://www.mizar.dk/XPath/Default.aspx。xElement指向一個正確的節點? – Anurag 2010-04-01 00:42:14

0

如果你只需要選擇那些在根級別,那麼你可以這樣做:

xElement.XPathSelectElements("/ns:Image", namespace); 

//告訴XPath引擎來看待所有Image節點,無論它們的深度。

+0

不,我想所有的子圖像元素無論它的根級或孩子的孩子。 – Cool 2010-03-31 23:41:02

+0

儘管我可以更改我的答案以匹配您的編輯,但@ Anurag的答案已經解決了這種情況。 – 2010-03-31 23:56:20

+0

非常感謝Kaleb。對不起,但我不得不編輯我的問題,因爲它令人困惑而且不準確。 – Cool 2010-04-01 00:06:20

0

/ns:Parent/ns:Image應該做的伎倆

+0

圖像元素可以在xml中的任何地方。父/圖像,父/ ABCD /圖像,父/../../圖像。 我想要所有這些圖像元素,除了在子內部,即父/子。 – Cool 2010-03-31 23:49:30