Я не могу перемещаться по 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>
Предполагая, что я уже нахожусь на узле «Joe» (т.е. элемент Name внутри Child 1), мне нужно определить запрос XPath, который «обернет» этот узел следующим образом:
<Root>
<!-- Child 1 -->
<Child>
<Name>Joe</Name>
<Age>12</Age>
</Child>
</Root>
Я пробовал различные комбинации предка, объединения строк, конкатенации и т. Д., Но не могу найти решение, которое правильно «обертывает» элемент. (Я использовал предок, например, возвращал все дочерние узлы, а это не то, что мне нужно.)
Некоторые другие соображения:
- Решением должен быть однострочный запрос XPath, если это возможно (по причинам, указанным ниже).
- Он должен быть достаточно общим, чтобы работать с любым дочерним элементом (например, он не может предполагать, что я всегда нахожусь на первом, втором или третьем дочернем элементе).
- Из приведенного выше примера вы можете видеть, что мне фактически не нужен фактический корневой узел как таковой, а только его тег (т.е. мне не нужны все дочерние узлы под ним). Однако мне нужен фактический дочерний узел (чтобы я получил имя и возраст).
ПРИМЕЧАНИЕ. Как бы то ни было, я не могу программно перемещаться по XML. Я использую библиотеку (код которой я не могу изменить), в которой мне нужно определить все в терминах однострочных запросов XPath в файле конфигурации. По сути, он будет перемещаться по всем элементам Name, поэтому мое решение должно работать с этого момента.
xpath
(также взятом из спецификации): Основная цель XPath - адресовать части XML-документа Он не сериализует новый документ , противоположность XQuery и XSLT. - person   schedule 09.02.2011