解析RDF XML文件以获取所有rdf:about值

Dav*_*vid 2 php xpath rdf simplexml

我正在使用php的简单xml和xpath来解析rdf xml文件,并且正在努力获取所有rdf:about值的列表.

有什么建议?

Gor*_*don 7

在PHP5.3之前使用带有命名空间属性的SimpleXml时似乎存在问题.基本上,:当转换为SimpleXml元素的object属性时,任何带有a的东西都会被删除.以下会这样做,但对我来说感到讨厌:

$rdf = str_replace('rdf:about', 'rdf_about', $rdf);  
$rdf = new SimpleXMLElement($rdf);
foreach($rdf->xpath('//@rdf_about') as $node) {
  echo $node, PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)

看这里:

您可以使用DOM而不是SimpleXml:

$dom = new DomDocument;
$dom->loadXml($rdf);
$xph = new DOMXPath($dom);
$xph->registerNamespace('rdf', "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
foreach($xph->query('//@rdf:about') as $attribute) {
    echo $attribute->value, PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)

但是,我建议在SimpleXml或DOM上使用专用库:

这是一篇关于解析器的博客文章: