可能重复:
如何用PHP解析HTML?
我需要解析td标记中的一个字符串。我可以使用以下jQuery来完成这项工作:
$("#right .olddata:first td.numeric:first").html()
如果我在字符串变量中有HTML代码,我如何获得相同td的内容?
简单HTML DOM
SimpleHTMLDom提供了一种访问php中htmldom的面向对象方法。我以前曾成功地使用过它,但它会被大型dom结构阻塞。一个很好的特性是能够使用这种oo设计来操作和保存dom。它允许您执行dom的选择器搜索:
// Find all <div> which attribute id=foo
$ret = $html->find('div[id=foo]');
或:
// Find all <li> in <ul>
foreach($html->find('ul') as $ul)
{
foreach($ul->find('li') as $li)
{
// do something...
}
}
// Find first <li> in first <ul>
$e = $html->find('ul', 0)->find('li', 0);
它允许遍历:
echo $html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id');
DOMDocument
正如其他人所指出的,您也可以使用DOMDocument。
XPath
根据我的个人经验,虽然xpath很难工作,但如果你只对从dom中提取信息感兴趣,这是值得的。
虽然与您试图提取的信息并不完全相关,但以下是我如何使用xpath从xml文档中提取信息:
XML:
<?xml version="1.0" encoding="utf-8"?>
<Report>
<CampaignPerformanceReportColumns>
<Column name="AccountName" />
...
<Column name="CampaignId" />
</CampaignPerformanceReportColumns>
<Table>
<Row>
<CampaignName value="Auctions" />
<GregorianDate value="8/11/2010" />
...
<CampaignId value="60312546" />
</Row>
<Row>
<CampaignName value="Auctions" />
<GregorianDate value="8/11/2010" />
...
<CampaignId value="60312546" />
</Row>
<Row>
<CampaignName value="Auctions 2" />
<GregorianDate value="8/11/2010" />
...
<CampaignId value="603125467" />
</Row>
</Table>
</Report>
PHP:
$xml = simplexml_load_file($file);
// Get each Row
$result = $xml->xpath("Table/Row");
// Get the CampaignId of each Row
$result = $xml->xpath("//Row/CampaignId");
XPath还有更多的特性;如果您需要从任何xml结构化文档中提取大量信息,我鼓励您探索它。
您可以使用DOMDocument
和DOMXPath
。
示例(我们的HTML位于字符串变量$html
中(:
$doc = new DOMDocument();
$doc->loadHTML($html);
$XPath = new DOMXPath($doc);
$tr = $XPath->query('//*[@id="right"]//*[@class="olddata"][1]//td[@class="numeric"][1]');
$tr = $tr->item(0);
$trHTML = $tr->nodeValue;
演示:http://codepad.org/XmGPgrWp
您肯定应该看看DOMDocument->loadHTML((。
$doc = new DOMDocument();
$doc->loadHTML("<html><body><p id='"foo'">bar</p></body></html>");
$foo = $doc->getElementById('foo');
echo $foo; // Outputs 'bar'
$td = $doc->getElementsByTagName('td')->nodeValue;
echo $td; // Outputs your <td> value. In this case, nothing.
我认为您正在寻找PHP DOM扩展。或者,您可以使用正则表达式来匹配所需内容。