Мне нужно сгенерировать NodeList
, который представляет все поддерево (включая атрибуты, комментарии и объявления пространства имен) данного Node
в моем Document
.
Давайте предположим, что мой документ выглядел следующим образом:
<?xml version="1.0"?>
<my:root xmlns:my="http://www.my.com/#">
<my:element type="1">
<my:content green="true">
<xx:content xmlns:xx="http:://www.xx.com/#"/>
</my:content>
</my:element>
</my:root>
Теперь я хочу выбрать все подузлы, включая сам этот элемент, чтобы мой результирующий выбор представлял суб-tree
<my:element type="1">
<my:content green="true">
<xx:content xmlns:xx="http:://www.xx.com/#"/>
</my:content>
</my:element>
a) Как я могу этого добиться, если, например, атрибут type можно считать уникальным?В настоящее время я использую выражение XPath вроде
/descendant-or-self::node()[@type='1']/descendant-or-self::node()
Есть ли лучший способ сделать это?
b) В другом сценарии мне просто дают явные ссылки Node
, безлюбое знание их контекста в DOM, что означает, что у меня нет средств для умного выбора «якорного узла» с использованием любой описывающей характеристики.Есть ли способ получить выражение XPath из ссылки Node
, которая выберет поддерево этого конкретного узла?Или это единственный шанс, который у меня есть в этом случае - генерация NodeList
вручную, путем перебора узла и его дочерних элементов?