从网关我得到一个非常不实际的结果,它是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内部标签的东西...我已经浏览了很多但是如果这样的解析是可能的并且更重要的话,找不到任何正确的答案?
答案 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.