XPATH - 选择具有特定属性的所有子节点

时间:2010-03-21 17:43:04

标签: php xml xpath rdf

查找具有特定属性值的所有子节点的xpath查询是什么,但是从具有特定属性值的节点开始?

这与我之前发布的关于解析rdf xml文件的问题有关 - 我以为我已经解决了它但还没有解决。

例如,我正在尝试解析并获取所有rdf:about属性值。我有这个工作正常。我需要添加以下条件 - 解析需要在找到特定的rdf:about值后启动。

我正在使用PHP并使用DomDocument并使用以下xpath查询:

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

它发现所有rdf:about属性都很好。

我需要将其扩展为仅查找rdf:about属性等于某事物的节点之后的那些属性。

希望这是有道理的。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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查询,我什么也得不回来。