鉴于下面采用的 XML/RDF 示例 from the W3C网站,如何访问“cd”命名空间中的值?
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http://www.recshop.fake/cd#">
<rdf:Description
rdf:about="http://www.recshop.fake/cd/Empire Burlesque">
<cd:artist>Bob Dylan</cd:artist>
<cd:country>USA</cd:country>
<cd:company>Columbia</cd:company>
<cd:price>10.90</cd:price>
<cd:year>1985</cd:year>
</rdf:Description>
</rdf:RDF>
我尝试执行以下操作:
$XML = new SimpleXMLElement($rawXML); // Assume $rawXML is the quoted XML/RDF above
foreach($xml as $entry){
$cd = $entry->children('http://www.recshop.fake/cd#');
echo $cd->artist;
echo $cd->$country;
...
}
我也尝试过这样做:
$XML = new SimpleXMLElement($rawXML); // Assume $rawXML is the quoted XML/RDF above
foreach($xml as $entry){
$cd = $entry->children('http://www.recshop.fake/cd#');
$rdf = $entry->children('http://www.w3.org/1999/02/22-rdf-syntax-ns#');
echo $rdf->$cd->artist;
echo $rdf->$cd->$country;
...
}
另外,在 PHP 中是否有必要做一些不同的事情,而不是声明 xmlns:cd="http://www.recshop.fake/cd#"
是xmlns="http://www.recshop.fake/cd#"
并且“cd”命名空间已从 <cd:artist>
中删除。等
最佳答案
您不应该使用 XML 解析器来读取 rdf/xml,因为它不理解将 RDF 三元组写入 XML 的编码;有多种方法可以写下其中一个术语,例如 cd:artist
。这就像在 JSON 数据上使用正则表达式 - 它可能有效,但不会捕获所有情况。使用 XML 方法,您最终会产生误解。我建议您使用 https://github.com/semsol/arc2 中的解析器
XML 方法起作用的唯一方法是保证生成的 XML 始终使用相同的模板编写。例如,XMP 文档元数据就是这种情况。
关于php - 使用 SimpleXML 解析 PHP 中嵌套的 XML/RDF 命名空间元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066198/