首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >simpleXML返回空元素

simpleXML返回空元素
EN

Stack Overflow用户
提问于 2010-09-28 22:26:57
回答 2查看 2.2K关注 0票数 0

我在读取XML文件的XML-Feed示例时遇到问题:

代码语言:javascript
运行
复制
<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>...

一个简单的测试,比如:

代码语言:javascript
运行
复制
$feed = new SimpleXMLElement($xml);
print_r($feed);

产生

代码语言:javascript
运行
复制
SimpleXMLElement Object ( )

如果我尝试

代码语言:javascript
运行
复制
echo $xml;

上面的示例是正确回显的。

为什么不构建$feed阵列?如何在<f:articles>中访问所有<a:article>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-05 09:32:00

如何在<f:articles>中访问所有<a:article>

在我看来,simpleXML在处理名称空间时似乎有点笨拙(但话又说回来,我不是PHP程序员)。您可以使用children方法,但在我看来,使用XPath更简单。

代码语言:javascript
运行
复制
$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

  • does是格式良好的xml的字符串使用显式字符串参数

  • $xml创建SimpleXMLElement您可以使用simplexml_load_file($yourXMLfile);或work加载文档
票数 0
EN

Stack Overflow用户

发布于 2020-04-17 12:42:45

我也遇到过类似的问题,结果发现这个问题与CDATA相关。

所以一开始我用的是:

代码语言:javascript
运行
复制
$feed = simplexml_load_file($rss_url);

然后我得到了空的描述对象,就像op:

代码语言:javascript
运行
复制
[description] => SimpleXMLElement Object
   (
   )

但是后来我在PHP.net站点的评论中找到了这个解决方案,说我需要使用LIBXML_NOCDATA标志:https://www.php.net/manual/en/function.simplexml-load-file.php

代码语言:javascript
运行
复制
$feed = simplexml_load_file($rss_url, "SimpleXMLElement", LIBXML_NOCDATA);

进行此更改后,我得到的描述如下:

代码语言:javascript
运行
复制
[description] => My description text!

不过,我不太确定如何将LIBXML_NOCDATA直接应用于SimpleXMLElement。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3813780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档