我是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;
我只需要显示内容节点的内容,但输出为空
答案 0 :(得分:2)
首先,提供的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并从中删除所有标记,只留下&#34;内部文本&#34;对于每个元素。
最后,我建议您使用PHP Simple HTML DOM Parser,因为它非常易于使用,并且更适合从HTML中抓取数据。
答案 1 :(得分:1)
如果您只想显示内容节点中的内容,那么这里是您的代码
<?php
$html = "";
$url = "data.xml";
$xml = simplexml_load_file($url);
$title = $xml->page->content->asXML();
$html .= "<p>$title</p>";
echo $html;
答案 2 :(得分:0)
您在XML节点中有HTML。这需要XML编码,通常使用CDATA块完成。然后,您可以将$xml->page->content
元素与echo
一起使用,或者将其强制转换为字符串。
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;
}