我在PHP中使用DOM和XPath解析HTML页面。
我必须从HTML中获取嵌套的<Table...></table>
。
我在浏览器中使用FirePath定义了一个指向
的查询html/body/table[2]/tbody/tr/td[2]/table[2]/tbody/tr/td/table
当我运行代码时,它说DOMNodeList
的长度为0.我的目标是将查询的<Table>
作为一个字符串。这是PHP中的HTML抓取脚本。
以下是该功能。请帮助我如何提取所需的<table>
$pageUrl = "http://www.boc.cn/sourcedb/whpj/enindex.html";
getExchangeRateTable($pageUrl);
function getExchangeRateTable($url){
$htmlTable = "";
$xPathTable = nulll;
$xPathQuery1 = "html/body/table[2]/tbody/tr/td[2]/table[2]/tbody/tr/td/table";
if(strlen($url)==0){die('Argument exception: method call [getExchangeRateTable] expects a string of URL!');}
// initialize objects
$page = tidyit($url);
$dom = new DOMDocument();
$dom->loadHTML($page);
$xpath = new DOMXPath($dom);
// $elements is sppearing as DOMNodeList
$elements = $xpath->query($xPathQuery1);
// print_r($elements);
foreach($elements as $e){
$e->firstChild->nodeValue;
}
}
答案 0 :(得分:3)
$dom = new domDocument;
$dom->loadHTML($tes);
$dom->preserveWhiteSpace = false;
$tables = $dom->getElementsByTagName("table");
$rows = $tables->item(0)->getElementsByTagName("tr");
print_r($rows);
答案 1 :(得分:2)
从XPath查询中删除tbody - 在大多数情况下,它们会被您的浏览器插入,就像您要搜索的页面一样。
/html/body/table[2]/tr/td[2]/table[2]/tr/td/table
这很可能会奏效。
然而,使用不同的XPath可能更安全。以下XPath将根据它的文本内容选择第一个,然后选择tr的父级 - tbody或table:
//th[contains(text(),'Currency Name')]/parent::tr/parent::*
答案 2 :(得分:0)
xpath查询应该与前导/
类似: -
/html/...