tags:

views:

455

answers:

2

Hi, what would be the xpath for the following:

Find all child nodes with a specific attibute value but starting from a node with a specific attribute value.

This is kind of related to a question I posted earlier about parsing and rdf xml file - I thought I had solved it but not quite yet.

For example I am trying to parse and grab all of the rdf:about attribute values. I have this working fine. I need to add the following condition though - parsing needs to start after a specific rdf:about value is found.

I am working in php and and using DomDocument and am using the following xpath query: $xpath->query('//@rdf:about') - it is finding all rdf:about attributes fine.

I need to extend this to only find thos attributes that come after the node who rdf:about attribute is equal to something.

Hope this makes sense.

+1  A: 
$xpath->query("//*[@rdf:about='http://rdfs.org/sioc/ns#']/following-sibling::*/@rdf:about");

With your sample script, outputs URLs starting/ending with:

http://rdfs.org/sioc/ns#Community
http://rdfs.org/sioc/ns#Container
...
http://rdfs.org/sioc/ns#reference
http://rdfs.org/sioc/ns#subject
Chris Smith
David
Yupp, I limited it to rdf:Description elements but the value you're after is an attribute of owl:Ontology
VolkerK
+1  A: 

HI Chris sorry but that isnt quite working for me. If you run my following code:

    $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);
}

You should get a list of elements in the sioc ontology. The problem is that the first 9 are not actually part of the ontology and so I want to ignore them and start on the 10th node which has 'http://rdfs.org/sioc/ns#' as its value for the rdf:about attribute.

By including your xpath query i get nothing back at all.

David
Right. I misunderstood what you were asking for. I've edited my answer and it seems to work with your code.
Chris Smith