2010-03-31 192 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