XPath выбирает определенные дочерние элементы - PullRequest
2 голосов
/ 01 апреля 2010

Если у меня есть XML-дерево, подобное этому -

<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>

Я хочу выбрать все <Image\> узлы, кроме перечисленных внутри <Child\> узла. В настоящее время я использую запрос, чтобы выбрать все узлы изображения, -

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

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 01 апреля 2010

получить все Image элементы, чей родитель не является Child.

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

Редактировать 1: Этот ниже не будет работать, так как Parent также выбран в процессе, который не является Child, и Image является одним из потомков (через Child).

Вы также можете получить все элементы Image, чей предок не является Child

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

Редактировать 2: Это, вероятно, работает лучше всего для всех случаев. Он получает все Image узлы, которые не являются потомками Child.

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

0 голосов
/ 01 апреля 2010

/ns:Parent/ns:Image должен сделать трюк

0 голосов
/ 01 апреля 2010

Если вы хотите выбрать только те, которые находятся на корневом уровне, то вы можете просто сделать:

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

// заставляет механизм xpath просматривать все Image узлы независимо от их глубины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...