我在读取XML文件的XML-Feed示例时遇到问题:
<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阵列?如何在<f:articles>中访问所有<a:article>?
发布于 2010-10-05 09:32:00
如何在
<f:articles>中访问所有<a:article>?
在我看来,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阵列?
很难猜测这是什么原因。一些你可以测试的东西:
work document
$xml创建SimpleXMLElement您可以使用simplexml_load_file($yourXMLfile);或work加载文档发布于 2020-04-17 12:42:45
我也遇到过类似的问题,结果发现这个问题与CDATA相关。
所以一开始我用的是:
$feed = simplexml_load_file($rss_url);然后我得到了空的描述对象,就像op:
[description] => SimpleXMLElement Object
(
)但是后来我在PHP.net站点的评论中找到了这个解决方案,说我需要使用LIBXML_NOCDATA标志:https://www.php.net/manual/en/function.simplexml-load-file.php
$feed = simplexml_load_file($rss_url, "SimpleXMLElement", LIBXML_NOCDATA);进行此更改后,我得到的描述如下:
[description] => My description text!不过,我不太确定如何将LIBXML_NOCDATA直接应用于SimpleXMLElement。
https://stackoverflow.com/questions/3813780
复制相似问题