Я ищу строку XPath (для VBA Excel), которая может искать все узлы определенного уровня и которые возвращаются только в том случае, если они имеют конкретный (большой) дочерний узел. Независимо от того, как «глубоко» это вложен. Relationale: Я не знаю, насколько глубокий определенный ребенок вложен, поэтому я не могу сделать фиксированный путь.XML-выбор родительского элемента на основе дочернего элемента и/или внука с определенными атрибутами
В случае примера ниже. Я ищу все узлы, которые находятся непосредственно под корнем '', и которые имеют любой дочерний элемент, который содержит имя «Test», но этот ребенок не может содержать функцию «10». Однако функция '10' может быть доступен на более высоких уровнях
XML STRING:
<Program>
<AA name="1" function="01"/>
<BB name="2" function="10">
<CC name="Test" function="01"/>
</BB>
<DD name="Test" function="05"/>
<EE name="3" function="01">
<FF name="4" function="05">
<GG name="Test" function="10"/>
</FF>
</EE>
</Program>
ТРЕБУЕТСЯ ВЫБОР:
Item(0) = <BB name="2" function="10">
Item(1) = <DD name="Test" function="05">
Следующее выражение XPath дает узлы под Program
которые содержат название «Тест»
xmlDoc.selectNodes("/Program/*[.//@name='Test']")
Как я могу выбирать ребенка на основе 'функции'
Здравствуйте JWiley, это не совсем ответ мне нужно. Эта функция вернет и , но мне нужны и , так что узлы непосредственно под корнем (этот вопрос только для принципа, действительная функция сложнее). У функции, которую у меня есть, есть , и , но это последнее, что мне нужно отфильтровать –
Ах, извините, неправильно прочитайте вопрос. Я скоро обновлю ... – JWiley
Благодаря триггеру JWiley я нашел полный код. Мне не хватало * [...] в моем коде. Таким образом, полная формула выглядит так. xmlDoc.selectNodes ("/ Программа /*[.//*[@ имя = 'Test' и @function! = '10']]") Спасибо за триггером –