用于查找嵌套元素的Xpath查询

时间:2017-05-02 04:31:59

标签: php xpath simple-html-dom

我很难搞清楚为什么我没有通过这个基本的两部分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);

1 个答案:

答案 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
)