XPATH - выбрать все дочерние узлы с определенным атрибутом - PullRequest
5 голосов
/ 21 марта 2010

Каким будет запрос xpath, чтобы найти все дочерние узлы с определенным значением атрибута, но начиная с узла с определенным значением атрибута?

Это как-то связано с вопросом, который я опубликовал ранее о разборефайл rdf xml - я думал, что решил его, но пока не совсем.

Например, я пытаюсь проанализировать и получить все значения атрибута rdf:about.У меня это работает нормально.Мне нужно добавить следующее условие - синтаксический анализ должен начаться после того, как будет найдено определенное значение rdf:about.

Я работаю в PHP и использую DomDocument и использую следующий запрос xpath:

$xpath->query('//@rdf:about');

Он находит все атрибуты rdf:about в порядке.

Мне нужно расширить это, чтобы найти только те атрибуты, которые идут после узла, чей атрибут rdf:about равен чему-то.

Надеюсь, это имеет смысл.

Ответы [ 2 ]

2 голосов
/ 21 марта 2010
$xpath->query("//*[@rdf:about='http://rdfs.org/sioc/ns#']/following-sibling::*/@rdf:about");

В вашем примере сценария выводятся URL-адреса, начинающиеся / заканчивающиеся на:

http://rdfs.org/sioc/ns#Community
http://rdfs.org/sioc/ns#Container
...
http://rdfs.org/sioc/ns#reference
http://rdfs.org/sioc/ns#subject
1 голос
/ 21 марта 2010

Привет, Крис, извини, но это не совсем работает для меня.Если вы запустите мой следующий код:

    $dom = new DomDocument;
$dom->load('http://rdfs.org/sioc/ns#');
$xpath = new DOMXPath($dom);

$elements = array();
foreach($xpath->query('//@rdf:about') as $element) {

    array_push($elements, $element->value);
}

foreach($elements as $element) {

    echo("<br />" . $element);
}

Вы должны получить список элементов в онтологии sioc.Проблема в том, что первые 9 на самом деле не являются частью онтологии, и поэтому я хочу проигнорировать их и начать с 10-го узла, который имеет значение http://rdfs.org/sioc/ns#' для атрибута rdf: about.1007 * Включая ваш запрос xpath, я вообще ничего не получаю.

...