如何使用php从嵌套的XML节点检索数据?


how can i retrieve data from nested xml node using php?

我是新的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;
}