我在阅读XML-Feed时遇到了问题 XML文件的示例:
<f:feed xmlns:f="http://www.bbgo.de/feedxml/feed" xmlns:a="http://www.bbgo.de/feedxml/article" xmlns="http://www.w3.org/1999/xhtml" f:customer="blub" f:name="dax-tecdax">
<f:title>Analysen: DAX, TecDAX</f:title>
<f:date>2010-09-22T20:46:29+02:00</f:date>
<f:url>http://www.bbgo.de/export/feed/stock-channel/dax-tecdax</f:url>
<f:articles>
<a:article a:id="2310446" a:status="published" a:payed-content="false" xml:lang="de-DE">
<a:title>Kabel Deutschland mit Verkaufsempfehlung</a:title>...
一个简单的测试,如:
$feed = new SimpleXMLElement($xml);
print_r($feed);
生成
SimpleXMLElement Object ( )
如果我尝试
echo $xml;
以上样本正确回显。
为什么没有构建$ feed数组?如何访问<a:article>
中的所有<f:articles>
?
答案 0 :(得分:0)
如何访问
<a:article>
中的所有<f:articles>
?
对我来说,使用命名空间时simpleXML似乎有点笨拙(但话说再说一次,我不是PHP编码器)。您可以使用children
方法,但在我看来,使用XPath更简单。
$feed->registerXPathNamespace('f', 'http://www.bbgo.de/feedxml/feed');
$feed->registerXPathNamespace('a', 'http://www.bbgo.de/feedxml/article');
$article = feed->xpath("/f:feed/f:articles/a:article");
首先,您需要使用一些前缀注册名称空间(前缀不需要与XML文档中使用的前缀相匹配,但名称空间URI必须匹配),然后在XPath表达式中使用这些前缀来选择目标。如果没有元素名称前缀,XPath表达式将查找不在任何名称空间中的元素。
为什么没有构建$ feed数组?
很难猜出这个原因。你可以测试的一些事情:
$xml
格式正确的xml文档$feed = new SimpleXMLElement('<root><child/></root>');
simplexml_load_file($yourXMLfile);
或simplexml_load_string($yourXMLstring);
答案 1 :(得分:0)
我遇到了类似的问题,结果证明该问题与CDATA有关。
所以最初我是用这个的:
j = &i;
然后我得到了像op一样的空描述对象:
$feed = simplexml_load_file($rss_url);
但是后来我在PHP.net网站的注释中找到了这个解决方案,说我需要使用LIBXML_NOCDATA标志:https://www.php.net/manual/en/function.simplexml-load-file.php
[description] => SimpleXMLElement Object
(
)
进行此更改后,我得到了这样的描述:
$feed = simplexml_load_file($rss_url, "SimpleXMLElement", LIBXML_NOCDATA);
虽然不确定如何直接将LIBXML_NOCDATA应用于SimpleXMLElement。