使用Simple XML和xpath解析XML文件

时间:2014-09-23 15:14:25

标签: php xml xpath simplexml

我试图获取节点的值" / entry / comment [type =" subcellular location"] / subcellularLocation / location"来自此文件http://www.uniprot.org/uniprot/P12345.xml

我使用的是SimpleXML和xpath但我无法通过以下方式访问此节点:

$var = "http://www.uniprot.org/uniprot/P12345.xml";
$Unip_result= new SimpleXMLElement($var, NULL, TRUE);

$value=$Unip_result->xpath("/entry/comment[@type='subcellular location']");

结果是一个空数组......

2 个答案:

答案 0 :(得分:1)

XML具有名称空间,您需要为其注册前缀并在XPath表达式中使用前缀。检查SimpleXMLElement::registerXpathNamespace()

答案 1 :(得分:0)

您的XML具有默认命名空间(没有前缀的xmlns="....")。默认命名空间声明的元素及其所有后代没有前缀且没有不同的默认命名空间的元素在祖先的默认命名空间中被考虑。因此,您需要注册一个指向默认命名空间URI的前缀,并在XPath中使用该前缀:

$var = "http://www.uniprot.org/uniprot/P12345.xml";
$Unip_result = new SimpleXMLElement($var, NULL, TRUE);
$Unip_result->registerXPathNamespace('ns', 'http://uniprot.org/uniprot');

$value = $Unip_result->xpath("/ns:uniprot/ns:entry/ns:comment[@type='subcellular location']");