我很难搞清楚为什么我没有通过这个基本的两部分xpath示例获得任何结果,而且我已经使用Chrome的XPath Helper来确认第二个xpath查询确实是正确的并确实返回我想要的一排。 有人可以解释为什么它会产生空洞的结果吗?在这个例子中,我期望得到以BNY作为货币代码的表格行,即中国的人民币。一般情况下,我希望表行数据用于所请求的任何货币代码,如果货币代码不在表中,则需要空结果。
我还尝试在html加载后立即执行第二个xpath查询(绕过xpath查询以检索JUST表),但是返回所有行。我觉得我在这里做了一些根本性的错误,但我无法发现它,因为Chrome的XPath Helper工作正常。
$ccode = 'CNY';
// Create a DOM object
$html = new simple_html_dom();
$url = "http://www.xe.com/symbols.php";
// Load HTML from a URL
$html->load_file($url);
$table = $html->find('table.currencySymblTable', 0);
$xpathQuery = '//table/tbody/tr/td[2][text() = "'.$ccode.'"]/..';
echo $xpathQuery;
$tr = $table->find($xpathQuery);
print_r($tr);
答案 0 :(得分:1)
您使用了错误currency code
它应该 CNY 并且您使用了错误
XPATH 应为此
table[@class="currencySymblTable"]/tr/td[2][text()="CNY"]/parent::tr
<?php
ini_set('display_errors', 1);
libxml_use_internal_errors(true);
$htmlContent = file_get_contents("http://www.xe.com/symbols.php");
$object = new DOMDocument();
$object->loadHTML($htmlContent);
$xpath = new DOMXPath($object);
$xpathQuery = '//table[@class="currencySymblTable"]/tr/td[2][text()="CNY"]/parent::tr';
$results = $xpath->query($xpathQuery);
foreach ($results as $result)
{
print_r($result);
}
<强>输出:强>
DOMElement Object
(
[tagName] => tr
[schemaTypeInfo] =>
[nodeName] => tr
[nodeValue] => China Yuan RenminbiCNY¥¥165a5 info
[nodeType] => 1
[parentNode] => (object value omitted)
[childNodes] => (object value omitted)
[firstChild] => (object value omitted)
[lastChild] => (object value omitted)
[previousSibling] => (object value omitted)
[nextSibling] => (object value omitted)
[attributes] => (object value omitted)
[ownerDocument] => (object value omitted)
[namespaceURI] =>
[prefix] =>
[localName] => tr
[baseURI] =>
[textContent] => China Yuan RenminbiCNY¥¥165a5 info
)