XPath выражение для выбора всех узлов - PullRequest
0 голосов
/ 22 августа 2011

Я хотел бы найти все <Field /> узлы (которые могут быть произвольно вложены) внутри данного XmlNode.

Если сделать что-то вроде этого:

foreach(XmlNode n in node.SelectNodes('//Field'))...

Это возвращает все узлыво целом документе не все узлы в node.

Так ли должен работать XPath?Я просмотрел некоторые документы, и кажется, что запрос //Node должен быть ограничен любым узлом, к которому он был вызван.

Есть ли какой-либо другой способ выбора всех узлов с данным именем, которые находятся под конкретным узлом?

Ответы [ 5 ]

7 голосов
/ 22 августа 2011

Если вы используете '//Field', это абсолютно из корня документа. Для поиска относительно текущего узла просто используйте './/Field'.

1 голос
/ 22 августа 2011

Использование ./Field.

  • .// Означает потомков, включая детей детей (и т. Д.).
  • ./ Означает прямых детей.

Если XPath начинается с /, он становится относительно корня документа;чтобы сделать это относительно вашего собственного узла, запустите его с ./.

1 голос
/ 22 августа 2011

попробуйте использовать SelecteSingleNode()

0 голосов
/ 22 августа 2011

Удалить //, поскольку в противном случае выполняется поиск среди всех документов независимо от корневого узла.

node.SelectNodes("Field")
0 голосов
/ 22 августа 2011

Вы можете использовать простой запрос linq, например:

var techLeads = (from value in element.Descendants ("Manager")
where value.Attribute ("Name").Value == "Mgr1"
select value).Descendants("TechLead");

Образец XML:

<Employees>
 <Manager Name="Mgr1">
  <TechLead Name="TL1" />
  <TechLead Name="TL2" />
 </Manager>
</Employees>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...