Получить родительский узел определенного типа, используя xpath - PullRequest
2 голосов
/ 15 марта 2010

Я приведу пример проблемы, которая у меня есть. Мой XML такой

<root>
  <child Name = "child1">
  <node>
  <element1>Value1</element1>
  <element2>Value2</element2>
  </node>
  </child>
  <child Name = "child2">
  <element1>Value1</element1>
  <element2>Value2</element2>
  <element3>Value3</element3>
  </child>
</root>

У меня есть выражение xpath, которое возвращает все узлы "element2". Затем я хочу для каждого узла типа "element2" найти узел типа "child", который его содержит. Проблема в том, что между этими двумя узлами может быть от 1 до n разных узлов, поэтому я не могу просто использовать "..". Есть ли что-то вроде "//", которое будет смотреть вверх, а не вниз

У меня есть некоторые базовые знания по xpath, и в соответствии с http://www.w3schools.com/xpath/xpath_syntax.asp ".." возвращает текущего родительского узла, проблема в том, что текущий узел - "element2", а проблема в том, что xml является динамическим от третьей стороны библиотека, чтобы я мог иметь XML, как это

<child Name = "child1">
  <node>
  <element1>Value1</element1>
  </node>
</child>

или как это

<child Name = "child1">
  <node1>
   <node2>
    <node3>
     <element1>Value1</element1>
     <element2>Value2</element2>
    </node3>
   </node2>
  </node1>
</child>

Между «элементом» и дочерним элементом может быть более 3 узлов, а количество узлов варьируется от 1 до 20. Пожалуйста, приведите пример только одного запроса xpath, чтобы получить «дочерний» узел в обоих случаях, используя просто « .. "

С наилучшими пожеланиями,
Йордан

Ответы [ 3 ]

4 голосов
/ 15 марта 2010

Ось xpath предка - это то, что вы ищете:

element2/ancestor::child

Ось предка возвращает все элементы, которые содержат элемент контекста, в направлении вверх.

3 голосов
/ 15 марта 2010

Используйте оператор ...

3 голосов
/ 15 марта 2010

Итак, ваш текущий контекст - элемент element2? Используйте parent ось :

parent::child/@Name

Получит родительский элемент текущего элемента с именем child и получит его атрибут Name.

Если вы не в контексте element2 и хотите найти все элементы child с element2 дочерними элементами, вам нужен этот элемент:

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