У меня есть этот исходный XML-дерево:выражение XPath, чтобы исключить некоторые дочерние узлы
<?xml version="1.0" encoding="UTF-8"?>
<root>
<foo>
<bar>
<baz>
<item>
<methods>
<item>
<id>1</id>
</item>
</methods>
<id>1</id>
</item>
<item>
<methods>
<item>
<id>19</id>
</item>
</methods>
<id>2</id>
</item>
</baz>
</bar>
</foo>
<bar_method>
<root>
<bla id="1">
<methods>
<method id="1">
<calc md="ck" />
<tm m="14" />
<price_list>
<price mse="0">
<ins re="0" />
</price>
</price_list>
</method>
<method id="2">
<calc md="qck" />
<tm m="4" />
<price_list>
<price mse="1">
<ins re="0" />
</price>
</price_list>
</method>
</methods>
</bla>
<bla id="2">
<methods>
<method id="19">
<calc md="dd" />
<tm m="3" />
<price_list>
<price mse="01">
<ins re="0" />
</price>
</price_list>
</method>
</methods>
</bla>
</root>
</bar_method>
</root>
Теперь нужно поместить фрагмент этого дерева в переменной с помощью XPath. Фрагмент должен выглядеть следующим образом:
<bla id="1">
<methods>
<method id="1">
<calc md="ck" />
<tm m="14" />
<price_list>
<price mse="0">
<ins re="0" />
</price>
</price_list>
</method>
</methods>
</bla>
<bla id="2">
<methods>
<method id="19">
<calc md="dd" />
<tm m="3" />
<price_list>
<price mse="01">
<ins re="0" />
</price>
</price_list>
</method>
</methods>
</bla>
Это bla
узлов исключая method
узлов, id
атрибутов которых не хватает в /root/foo/bar/baz/item/methods/item/id
. Я использую следующее выражение, но он выбирает все узлы с дубликатами:
<xsl:variable name="meth" select="/root/bar_method/root//*[not(name() = 'method' and count(/root/foo/bar/baz//methods/item[id = @id]) = 0)]" />
Почему вам нужно разместить фрагмент в переменной. Какой результат вы хотите получить от XSL? Похоже, вам нужны шаблоны для меня. –
Мне просто интересно, возможно ли это. –
Похоже, вы хотите, чтобы все элементы 'bla' и только первый элемент' methods/method' внутри каждого из них. Это правильно? Вы не можете сделать это в одном выражении XPath, потому что вы можете ограничить только выбранные элементы - вы также не можете отфильтровать некоторых своих потомков. – Borodin