1

从网关我得到一个非常不寻常的结果,它是 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

4 回答 4

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

然后阅读如何使用DOM 库

于 2012-04-20T03:14:07.310 回答
0

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

您在这里有两个解析任务。

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

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

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

于 2012-04-20T02:46:14.567 回答
-1
$html = substr($xml, strpos($xml, '<html>'), 
               strpos($xml, '</html>') - strpos($xml, '<html>') + 7);
于 2012-04-20T03:12:39.127 回答
-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];
}

摘要:在 HTML_Report 开始和结束标记处拆分 xml 字符串,每次只保留包含 HTML 部分的结果数组的元素。这将导致 $html_portion 也包含 CDATA 包装器,因此如果您想避免这种情况,请在“”上拆分。

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

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

于 2012-04-20T02:52:04.143 回答