我是新的xml和数据检索,我有这个代码的问题。
XML代码:<?xml version="1.0" encoding="UTF-8"?>
<site>
<page>
<content>
<P>
<FONT size="2" face="Tahoma">
<STRONG>text...</STRONG>
</FONT>
</P>
<P>
<FONT size="2" face="Tahoma">text....</FONT>
</P>
<P align="center">
<IMG style="WIDTH: 530px" border="1" alt="" src="http://www.alkul.com/online/2014/5/6/child%20disorder.jpg">
</P>
<P>
<STRONG>
<FONT size="2" face="Tahoma">text3</FONT>
</STRONG>
</P>
<P>
<STRONG>
<FONT size="2" face="Tahoma">text1</FONT>
</STRONG>
</P>
</content>
</page>
</site>
php代码:<?php
$html = "";
$url = "Data.xml";
$xml = simplexml_load_file($url);
for ($i = 0; $i<10; $i++) {
$title = $xml->page[$i]->content->P->FONT;
$html .= "<p>$title</p>";
}
echo $html;
我只需要显示内容节点的内容,但输出是空的
首先,提供的XML是无效的,因为您应该收到以下错误:
警告:simplexml_load_string():实体:第8行:解析器错误:开始和结束标签不匹配:IMG第8行和p
在XML中,IMG元素需要像这样关闭:
<IMG style="WIDTH: 530px" border="1" alt="" src="http://www.alkul.com/online/2014/5/6/child%20disorder.jpg"/>
注意元素末尾的正斜杠。
如果您没有看到这个错误,请查看您的错误日志或在PHP中启用错误报告。
现在可以用SimpleXML解析XML。最后是这样的:
$pList = $xml->xpath('./page/content/P');
foreach ($pList as $pElement) {
$text = strip_tags($pElement->asXML());
echo $text . "<br>";
}
它选择所有p元素到$pList
,并在列表上迭代。对于每个元素,它获取XML并从中剥离所有标记,只留下每个元素的"内部文本"。
最后,我建议你使用PHP简单HTML DOM解析器,因为它很容易使用,更适合从HTML中抓取数据。
如果您只想显示内容节点中的内容那么这里是您的代码
<?php
$html = "";
$url = "data.xml";
$xml = simplexml_load_file($url);
$title = $xml->page->content->asXML();
$html .= "<p>$title</p>";
echo $html;
在XML节点中有HTML。这需要XML编码,通常使用CDATA块完成。然后,您可以将$xml->page->content
元素与echo
一起使用,或者将其强制转换为string。
XML(注意<![CDATA[
…]]>
部分):
<?xml version="1.0" encoding="UTF-8"?>
<site>
<page>
<content><![CDATA[
<P>
<FONT size="2" face="Tahoma">
<STRONG>text...</STRONG>
</FONT>
</P>
<P>
<FONT size="2" face="Tahoma">text....</FONT>
</P>
<P align="center">
<IMG style="WIDTH: 530px" border="1" alt="" src="http://www.alkul.com/online/2014/5/6/child%20disorder.jpg">
</P>
<P>
<STRONG>
<FONT size="2" face="Tahoma">text3</FONT>
</STRONG>
</P>
<P>
<STRONG>
<FONT size="2" face="Tahoma">text1</FONT>
</STRONG>
</P>
]]></content>
</page>
</site>
PHP: $xml = simplexml_load_file($url);
$firstTenPages = new LimitIterator(new IteratorIterator($xml->page), 0, 10);
foreach ($firstTenPages as $page)
{
echo $page->content;
}