DOMNodeList, xPath и PHP - PullRequest
       29

DOMNodeList, xPath и PHP

1 голос
/ 06 декабря 2011

Я анализирую HTML-страницу с DOM и XPath в PHP.

Мне нужно извлечь вложенный <Table...></table> из HTML.

Я определил запрос, используя FirePath вбраузер, который указывает на

html/body/table[2]/tbody/tr/td[2]/table[2]/tbody/tr/td/table

Когда я запускаю код, он говорит, что DOMNodeList извлекается с длиной 0. Моя цель - выдать запрашиваемый <Table> в виде строки.Это HTML-скрипт в PHP.

Ниже приведена функция.Пожалуйста, помогите мне, как я могу извлечь необходимые <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;  
    }

}

Ответы [ 3 ]

3 голосов
/ 06 декабря 2011

ты пробовал вот так

$dom = new domDocument; 
$dom->loadHTML($tes); 
$dom->preserveWhiteSpace = false; 
$tables = $dom->getElementsByTagName("table");
$rows = $tables->item(0)->getElementsByTagName("tr"); 
print_r($rows);
2 голосов
/ 06 декабря 2011

Удалите tbody из вашего запроса XPath - они в большинстве случаев вставляются вашим браузером, как и страница, которую вы пытаетесь очистить.

/html/body/table[2]/tr/td[2]/table[2]/tr/td/table

Это, скорее всего, будет работать.

Однако, вероятно, более безопасно использовать другой XPath. Следующий XPath выберет первый th, основываясь на его текстовом содержимом, затем выберите родителя tr - тело или таблицу:

//th[contains(text(),'Currency Name')]/parent::tr/parent::*
0 голосов
/ 06 декабря 2011

Запрос xpath должен быть с ведущим /, например: -

/html/...
...