Обтекание элемента XML его узлами / тегами-предками - PullRequest
1 голос
/ 09 февраля 2011

Я не могу программно перемещаться по документу XML, и мне нужно однострочное решение XPath по причинам, которые я опишу в конце.

Я работаю со схемой XML, которая выглядит примерно так, как показано ниже. (Это то, что я должен использовать как есть.)

<Root>
  <!-- Child 1 -->
  <Child>
      <Name>Joe</Name>
      <Age>12</Age>
  </Child>
  <!-- Child 2 -->
  <Child>
      <Name>Mike</Name>
      <Age>25</Age>
  </Child>
   <!-- Child 3 --> 
  <Child>
      <Name>Jane</Name>
      <Age>20</Age>
  </Child>
</Root>

Предполагая, что я уже на узле "Джо" (то есть элемент имени внутри дочернего элемента 1), мне нужно определить запрос XPath, который "обернет" этот узел следующим образом:

<Root>
  <!-- Child 1 -->
  <Child>
      <Name>Joe</Name>
      <Age>12</Age>
  </Child>
</Root>

Я пробовал различные комбинации предка, объединения строк, конкатов и т. Д., Но, похоже, не могу найти решение, которое правильно "оборачивает" элемент. (То, как я использовал ancestor, возвращало, например, все дочерние узлы, а это не то, что мне нужно.)

Некоторые другие соображения:

  1. Решением должен быть однострочный запрос XPath, если это возможно (по причинам, указанным ниже).
  2. Он должен быть достаточно универсальным, чтобы работать с любым дочерним элементом (т. Е. Он не может предполагать, что я всегда на первом, втором или третьем дочернем элементе, например).
  3. Из приведенного выше примера вы можете видеть, что на самом деле сам по себе корневой узел не нужен, а только его тег (т.е. я не хочу, чтобы все дочерние узлы находились под ним). Тем не менее, мне нужен фактический дочерний узел (чтобы я получил имя и возраст).

ПРИМЕЧАНИЕ. Несмотря на это, я не могу программно перемещаться по XML. Я использую библиотеку (код которой я не могу изменить), в которой я должен определить все в терминах однострочных запросов XPath в файле конфигурации. По сути, он будет перемещаться по всем элементам Name, поэтому мое решение должно работать с этого момента.

1 Ответ

1 голос
/ 09 февраля 2011

XPath - это запрос язык .

Это, помимо прочего, означает, что оценка выражения XPath никогда не изменяет документ XML.

Итак, ответ : изменение XML-документа или создание нового документа невозможно выполнить с использованием only XPath.

Такие преобразования очень просты и естественны дляуказать с помощью XSLT.

...