只是出于好奇,在得到XML之后
(我希望我没有在这个过程中破坏它——我会看看是否可以编辑操作来更正它)
:
我的意思是你可以用这个:
$xml = simplexml_load_string($str);
foreach ($xml->channel->item as $item) {
var_dump($item->description);
}
但这只会让你:
object(SimpleXMLElement)[5]
object(SimpleXMLElement)[3]
这不是很好…
您需要将数据强制转换为字符串,如下所示:
$xml = simplexml_load_string($str);
foreach ($xml->channel->item as $item) {
var_dump((string)$item->description);
}
你会得到描述:
string '
This is one of the content that I need printed on the screen, but nothing is happening. Please, please...output something... <br /><br /> <b>Showing</b>: 2 weeks<br /> <b>Starting On</b>: August 7, 2009 <br /> <b>Posted On</b>: August 7, 2009 <br />
<a href="http://www.mysite.com">click to view</a>
' (length=329)
string '
Another content...This is another of the content that I need printed on the screen, but nothing is happening. Please, please...output something... <br /><br /> <b>Showing</b>: 2 weeks<br /> Starting On: August 7, 2009 <br /> <b>Posted On</b>: August 7, 2009
;
' (length=303)
(使用)
trim
顺便说一句,如果XML是缩进的,那么在上面可能会有用)
否则…好吧,我们可能需要您的PHP代码(至少,了解您是如何访问
description
标签
;-)
)
编辑
感谢重新格式化的XML!
如果我转到Pastebin,在页面底部的文本区域中,XML的开头有一个空白,在
<?xml version="1.0" encoding="utf-8"?>
如果在实际的XML数据中有这样一个,那么这将是问题的根源:它不是有效的XML(XML声明必须是
第一
XML数据中的内容)。
您将得到如下错误:
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : XML declaration allowed only at the start of the document
你能查一下吗?
如果问题在这里,你应该激活
error_reporting
和
display_errors
那会有帮助的!
查看PHP文件后编辑:
在for循环中,您这样做是为了获取描述数据:
$item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
我想说,描述不包含任何子节点;直接使用它的nodeValue怎么样?
这样地:
$item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->nodeValue;
这样看来效果更好了——)
作为旁注,我想您也可以对其他标记进行同样的操作;例如,这似乎也起作用:
$item_title=$x->item($i)->getElementsByTagName('title')->item(0)->nodeValue;
$item_link=$x->item($i)->getElementsByTagName('link')->item(0)->nodeValue;
这给了你什么?
另一个编辑:下面是我可能使用的代码:
$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($str); // I changed that because I have the XML data in a string
//get elements from "<channel>"
$channel = $xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')->item(0)->nodeValue;
//output elements from "<channel>"
echo "<p><a href='" . $channel_link . "'>" . $channel_title . "</a>";
echo "<br />";
echo $channel_desc . "</p>";
//get and output "<item>" elements
$x = $xmlDoc->getElementsByTagName('item');
for ($i=0 ; $i<=1 ; $i++) {
$item_title = $x->item($i)->getElementsByTagName('title')->item(0)->nodeValue;
$item_link = $x->item($i)->getElementsByTagName('link')->item(0)->nodeValue;
$item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->nodeValue;
echo ("<p><a href='" . $item_link
. "'>" . $item_title . "</a>");
echo ("<br />");
echo ($item_desc . "</p>");
echo' <p />';
}
注意,我有一个字符串中的XML数据,不需要从URL获取它,所以我使用
loadXML
方法而非
load
.
主要的区别是我删除了一些子节点访问,我觉得这是不必要的。
你觉得这样行吗?