下面是一个从元素中抓取单个值的工作代码(基本上是抓住当前的汇率值。
$target_url = file_get_contents('http://www.bsp.gov.ph/statistics/sdds/exchrate.htm');
$new_dom_doc = new DOMDocument();
libxml_use_internal_errors(TRUE); //disable libxml errors
if(!empty($target_url)){ //check if target_url is actually returned
$new_dom_doc->loadHTML($target_url);
libxml_clear_errors(); //remove errors from yucky target_url
$xpath = new DOMXPath($new_dom_doc);
echo $xpath->query('//td[@class="xl1257110"]')->item(0)->nodeValue;
}
它的工作正常但唯一的问题是类名//td[@class="xl1257110"]
不是静态的,所以每当类名在一段随机时间后变为随机值时代码就会中断。
我有什么想法可以绕过这个问题吗?
答案 0 :(得分:0)
好吧,使用另一个标记。例如,SYMBOL文本和后面的表格单元格的位置。
$document = new DOMDocument();
$document->loadHTML($html);
$xpath = new DOMXpath($document);
$expression = "string(//td[text() = 'IDR']/following-sibling::td[2])";
var_dump(
$xpath->evaluate($expression)
);
输出:
string(8) "0.000068"
//td[text() = 'IDR']
将获取包含文字内容IDR
的表格单元格。 following-sibling::
选择具有相同父节点的以下节点,因此following-sibling::td
是以下td
节点。 [2]
是一个职位(从1开始)。
string()
将结果列表中的第一个节点转换为字符串。您将获得空列表的空字符串。这仅适用于DOMXpath::evaluate()
,而不适用于DOMXpath::query()
。