Запрос xpath для результата запроса xpath

например, у нас есть этот xml:

<body> <a> <b> <c>hello</c> <c>world</c> </b> </a> <a> <b> <c>another hello</c> <c>world</c> </b> </a> </body> 

по запросу Xpath мы можем найти все «B» -теги. Но тогда нам нужно найти все «C» -таг в каждом найденном «B» -tag. Я написал этот код:

 $dom = new DOMDocument(); $dom->loadXML($xml); $xpath = new DOMXPath($dom); $btags = $xpath->query("//b"); foreach ($btags as $b) { $ctags = $xpath->query("/b/c", $b); foreach ($ctags as $c) { echo $c->nodeValue; } } 

Но это не сработает. Это можно сделать с помощью запроса XPath?

Related of "Запрос xpath для результата запроса xpath"

Для второго XPath попробуйте это вместо: $ctags = $xpath->query("c", $b);

Этот второй XPath уже относится к узлу 'b' … если я не ошибаюсь, относительное перемещение в инструкциях PHP XPath требует, чтобы вы опустили ведущий '/'.

Вы уже находитесь в элементе «b» к моменту получения второго запроса. Что ваш код ищет, это «// b / b / c». Вместо этого попробуйте использовать только «/ c» во втором запросе. Вы также можете переместить это в один запрос с помощью «// b / c», если вы не хотите ничего делать с «b».

Роберт Хуэй не ошибается

FYI //b выбирает все элементы, которые являются типом b в любом месте документа, но использует / означает для выбора корневого узла, поэтому /b/c пытается выбрать корневой узел b, у которого есть дочерний узел c . Корневой узел – это элемент тела.