2010-03-21 6 views
5

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

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

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

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

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

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

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

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

+0

Я видел ваш предыдущий вопрос и заметил, что вы используете ARC, но не его парсер, я бы серьезно предложил использовать синтаксический анализатор, поскольку RDF/XML имеет много синтаксического сахара, и XPath, который работает для одного файла, не гарантированно работает другой. Если вы пытаетесь понять, как извлекать данные из анализируемых структур, попробуйте использовать библиотеку Graphite (http://graphite.ecs.soton.ac.uk/), которая представляет собой уровень абстракции высокого уровня над ARC2 – RobV

ответ

2
$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
+0

Thats perfect - thanks , Так что это была просто астерикс из совета Vollerk, который отсутствовал? Еще раз спасибо - вам обоим (Chris & Vollerk) – David

+0

Yupp, я ограничил его rdf: Элементы описания, но значение, которое вы используете, является атрибутом совы: онтология – VolkerK

1

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

$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.

Включая ваш запрос xpath, я ничего не получаю.

+0

Право. Я неправильно понял то, о чем вы просили. Я отредактировал свой ответ и, похоже, работает с вашим кодом. – Chris

Смежные вопросы