如何使用PHP解析HTML / XML

时间:2012-04-20 02:43:13

标签: php html xml

从网关我得到一个非常不实际的结果,它是XML内的HTML,这让我感到困惑。当我回显变量$result时,这是输出:

<Results>
    <XML_Report>
       <Subject>
         <EFX_Code>199</EFX_Code>
         <Referral>SPECIAL_WOHA</Referral>
       </Subject>
    </XML_Report>
<HTML_Report>
<![CDATA[
        <html>
        <head>


        </head>
        <body>



        <a name="mergereport" />

        <p>MERGE REPORT</p>

        <table border="1" WIDTH="100%" cellpadding=0 cellspacing=0>
        <tr><td class=heading colspan=4 align="center" bgcolor="#c0c0c0"><p class=heading>Personal Information Since 08/09/09 FAD 04/17/12</p></td></tr>
        <tr><td><br /></td><td><br /></td><td width="15%" align=center><p><b>Reported</b></p></td><td align=center><p><b>Bur</b></p></td></tr>
        <tr>
        <td width="15%" valign=top align=right><p class=pipad><b>
        Name<br />
        SSN<br />
        Inquiry SSN<br />
        DOB<br />
        Address
        </b></p></td>
        </tr></table>
        </body>

        </html>
]]>
 </HTML_Report>
</Results>

如何解析该变量以仅提取我想要的部分HTML。任何带有PHP内部标签的东西...我已经浏览了很多但是如果这样的解析是可能的并且更重要的话,找不到任何正确的答案?

4 个答案:

答案 0 :(得分:2)

$doc = new DOMDocument();
$doc->loadHTML($your_html);

然后阅读有关如何使用DOM library

的信息

答案 1 :(得分:0)

在理想的世界中,XML_Report将用于PHP之类的脚本,而HTML_Report仅用于人类显示。但是,您发布的样本似乎并非如此。

这里有两个解析任务。

首先,解析XML。在其中导航(通过XPath或DOM函数)到CDATA元素的HTML_Report内容。

现在,第二个任务:解析HTML,就像你将它作为原始字符串一样接收。

如果你问的是“我如何使用PHP解析HTML?”在这个网站上有大约18.74亿个答案。

答案 2 :(得分:-1)

$html = substr($xml, strpos($xml, '<html>'), 
               strpos($xml, '</html>') - strpos($xml, '<html>') + 7);

答案 3 :(得分:-2)

快速而肮脏的解决方案:

//Assumes the contents of the xml file are in a string called $xml
$arr = explode("<HTML_Report>", $xml);
if(count($arr) > 1)
{
    $arr2 = explode("</HTML_Report>", $arr[1]);
    $html_portion = $arr2[0];
}

摘要:将xml字符串拆分为HTML_Report开始和结束标记,每次只保留包含HTML部分的结果数组的元素。这将导致$ html_portion也包含CDATA包装器,所以如果你想避免它,那么拆分为“”。

它并不优雅,但它完成了工作。

编辑:固定代码从$ xml [1]到$ arr [1] - 感谢Marc B.