我有两个问题。让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文本?
答案 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');