带有atom命名空间的XPATH

时间:2013-11-21 15:23:00

标签: php xml xpath

我有两个问题。让XPATH使用atom命名空间并从CDATA字段获取数据。

我看到的xml

<?xml version="1.0" encoding="UTF-8" ?>
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:kml="http://www.opengis.net/kml/2.2">
    <title type="text"><![CDATA[Hello World]]></title>
</entry>

虽然我的PHP看起来像

 $xml = new SimpleXMLElement(file_get_contents($this->xmlFile));
 $xml->setAttributeNS( "http://www.w3.org/2005/Atom");
 $xml->registerXpathNamespace('kml' , 'http://www.opengis.net/kml/2.2');

 $result = $xml->xpath('/entry/title');
 var_dump($result);

从XML中删除atom命名空间允许我的xpath工作。但是如何让simplexml接受atom作为命名空间呢? 此外,当我获取数据(没有原子)时,我无法获取文本,因为它的格式为CDATA,我如何才能显示CDATA文本?

1 个答案:

答案 0 :(得分:2)

从PHP文档(http://us1.php.net/manual/en/domelement.setattributens.php):

  

将命名空间namespaceURI和name name的属性设置为给定值。如果该属性不存在,则会创建该属性。

您不想设置命名空间,但是您想声明它以便可以使用它,所以更改:

$xml->setAttributeNS( "http://www.w3.org/2005/Atom");

要:

$xml->registerXpathNamespace('atom' , 'http://www.w3.org/2005/Atom');

之后,您可以在XPath中使用该前缀:

$result = $xml->xpath('/atom:entry/atom:title');