Search code examples
phpxmlxpathrdf

XPATH - Select all child nodes with a specific attribute


What would be the xpath query to find all child nodes with a specific attribute value, but starting from a node with a specific attribute value?

This is kind of related to a question I posted earlier about parsing an 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 those attributes that come after the node whose rdf:about attribute is equal to something.

How?


Solution

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