以下是我需要解析为PHP程序的HTML示例:
<div id="dump-list">
<div class="dump-row">
<div class="dump-location odd" data-jmapping="{id: 35, point: {lng: -73.00898601, lat: 41.71727402}, category: 'office'}">
<div class="SingleLinkNoTx">
<a href="#10" class="loc-link">Acme Software</a><br/><strong>John Doe, MBA</strong><br/>123 Main St.<br />New York, NY 10036<br /><strong class="telephone">(212) 555-1234</strong><br/>
</div><!-- END.SingleLinkNoTx -->
<a href="http://www.example.com" target="_blank" class="web_link">Visit Website</a><span><br />(0.3 miles)</span>
<div class="loc-info">
<div class="loc-info-text ">
John Doe, MBA<br /><a href="http://maps.google.com/?daddr=41.71727402,-73.00898601" target="_blank">Get Directions »</a>
</div>
</div>
</div>
这是我想从上面的HTML示例中提取到PHP:中的信息
lng: -73.00898601, lat: 41.71727402
category: 'office'
Acme Software
John Doe, MBA
123 Main St.
New York, NY 10036
(212) 555-1234
http://www.example.com
我尝试过使用PHP Simple HTML DOM Parser,但我是新手,找不到适合我需要做的工作的PHP示例。我尝试了一些类似的PHP代码来了解它是如何工作的,但var_dump($e)产生了大量输出,并且在var_dmp中有关于递归的消息。所以我不知道如何真正使用它。非常感谢您的帮助!
$e = $html->find('.dump-location', 0)->find('.SingleLinkNoTx', 0);
echo $e;
var_dump($e);
使用XPath查找和提取HTML/XML文档中的元素,特别是SimpleXMLElement::XPath方法。
以下示例将查找某个位置的电话号码:
$doc = new DOMDocument();
$doc->loadHTML('your html snippet goes here - or use loadHTMLFile()');
$xml = simplexml_import_dom($doc);
$elements = $xml->xpath('//*[contains(@class, "dump-location")]/div[@class="SingleLinkNoTx"]/strong[@class="telephone"]');
print_r($elements);
最复杂的部分是XPath表达式。快速分解:
//
- 这个规则告诉解析器递归地将规则应用到文档中的所有元素
*[contains(@class, "dump-location")]
- 匹配任何具有
dump-location
类的元素
- 匹配任何具有
/
- 告诉解析器只将下一个规则应用于具有
dump-location
父级的元素
- 告诉解析器只将下一个规则应用于具有
div[@class="SingleLinkNoTx"]
- 匹配任何具有
SingleLinkNoTx
类(没有其他类名)的DIV
元素
- 匹配任何具有
strong
- 将所有
STRONG
标记与telephone
类匹配的规则
- 将所有
在问题中提供的HTML片段上使用此XPath表达式将产生如下输出。迭代和提取信息相当容易:
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[class] => telephone
)
[0] => (212) 555-1234
)
)
如果知道文档结构,就可以为要提取的每一条信息构造XPath表达式。或者,使用更通用的XPath表达式(例如,检索所有dump-location
元素的表达式)并手动遍历这些元素可能会更简单。