Как получить контент со следующего узла - PullRequest
1 голос
/ 16 июня 2011

У меня есть XML ниже -

<document>
  <node name="Node 0 Text here" ID="01" >aa
  </node>
  <node name="Node 1 Text here" ID="11">bb
  </node>
  <node name="Node 2 Text here" ID="12">cc
  </node>
  <node name="Node 3 Text here" ID="22">dd
  </node>
  <node name="Node 4 Text here" ID="23">ee
  </node>
</document>

Мне нужно искать контент в определенном узле в этом XML.Если ключевое слово поиска не существует в этом узле, то мне нужно начать поиск со следующего узла текущего узла, можно сказать, брат.Если это ключевое слово не существует во всех узлах после текущего узла, тогда оно должно начинать поиск с начала.

Я должен добиться этого в своем коде за классом dotnet.Я использовал -

 XmlNodeList xmlNodes = xd.SelectNodes("//12/following-sibling::*"); 

Здесь 12 относится к ID узла текущего узла, который будет передан в качестве аргумента.Но я получаю ошибку.Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 18 июня 2011
* +1000 * Используйте
  (/*/node[ID='12']/following-sibling::*[contains(.,$pattern)][1]
  |
   /*/node[ID='12']/preceding-sibling::*[contains(.,$pattern)][1]
  )
   [last()]

Это выражение выбирает последний из двух разыскиваемых выборок - первый из следующих братьев и сестер, который содержит значение $pattern, и первый из предшествующих братьев и сестер, который содержит значение $pattern.

Вам нужно заменить $pattern точным значением, которое вы хотите найти.

0 голосов
/ 16 июня 2011

Мне нужно искать контент в определенном узле в этом XML

, чтобы получить узел, соответствующий его содержимому, XPathis:

 node[contains(text(),'aa')]

Возвращает, например, первый узел и любой другой узел, текст содержимого которого содержит aa.

Если ключевое слово поиска делаетне существует в этом узле, то я должен начать поиск со следующего узла текущего узла, можно сказать, брат.Если это ключевое слово не существует во всех узлах после текущего узла, тогда оно должно начать поиск с начала.

Это предложение не имеет большого смысла для XPath.Выражение выше вернет все узлы, соответствующие ключевому слову.Если вам нужен первый соответствующий узел, вы можете получить его из XmlNodeList после или непосредственно из выражения XPath, изменив его на:

node[contains(text(),'aa')][1]

12 относится к nodeid ofтекущий узел, который будет передан в качестве аргумента

Это не правильно.Чтобы выбрать узел по идентификатору, вы должны использовать, например:

node[@id=12]/text()

Это позволит получить содержимое узла с id=12.

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