鉴于此XML:
<?php
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<project type="residential">
<item>
<description><![CDATA[Node 1 text]]></description>
</item>
<item>
<description><![CDATA[Node 2 text]]></description>
</item>
</project>
</root>
XML;
?>
我想列出所有字段的内容。
这就是我所拥有的。它失败并在非对象上出现错误“member function xpath()”。
// load xml file
include 'xml/portfolio_xml.php';
$portfolio = simplexml_load_string($xml);
foreach ($portfolio->xpath('//project[@type="residential"]/item') as $item) {
echo $item->description;
}
更新
实际上,此示例确实有效。显然,将样本从我的应用程序的其余部分中删除是我需要的。
答案 0 :(得分:3)
您需要检查simple_xml_load_string
是否成功。它现在失败了,因为$portfolio
不是一个对象。
这部分是为什么我更喜欢使用真正的构造函数而不是函数。我更喜欢捕获异常并以这种方式处理错误:
try
{
$portfolio = new SimpleXmlElement($xml);
foreach ($portfolio->xpath('//project[@type="residential"]/item') as $item) {
echo $item->description;
}
}
catch(Exception $e)
{
// do something.. or nothing on an error
}
这样,您不仅可以处理错误,还可以根据异常类型,代码,消息或上述所有内容采取特定操作。
此外,根据您可能想要的错误类型keep them internal to libxml。