Застрял на пересечении HTML-дом на странице - PullRequest
2 голосов
/ 15 августа 2011

Хорошо. Я застрял еще раз, и кажется, что Интернет просто исчерпал себя с учебниками HTML DOM. У меня есть эта страница (http://www.nasdaqomxbaltic.com/market/?pg=news&news_id=250910), и я пытаюсь сделать так, чтобы текст The statement of shareholders for shares sale and for shares purchase attached. и вложенные файлы были преобразованы в переменные. Я пытаюсь сделать это наиболее эффективным способом, поэтому я не использую simple_html_dom Я бы не использовал xpath, если бы у меня был выбор или он был бы быстрее, но я не уверен:)

РЕДАКТИРОВАТЬ: пробовал код Фила. Не могу понять, почему это все еще не работает.

   <?
$dom = new DOMDocument();
@$dom->loadHTMLFile("http://www.nasdaqomxbaltic.com/market/?pg=news&news_id=250910");

$xpath = new DOMXPath($dom);
$paragraph = $xpath->query('//table[@id="previewTable"]/tbody/tr[2]/td/p');//tried removing tbody, doesn't fix, why is it there?
if ($paragraph->length == 1) {//what is this?
     $sentence = $paragraph->nodeValue;
    print_r($sentence);//doesnt work (blank)
}
$links = $xpath->query('//table[@id="previewTable"]//td[@class="tdAttachment"]//a');
foreach ($links as $link) {
    $linkName = $link->nodeValue;
    $linkUrl = $link->getAttribute('href');
echo $linkName;
echo $linkUrl;//works
}
?>

1 Ответ

1 голос
/ 15 августа 2011

Это действительно зависит от того, насколько исправлена ​​эта разметка.

Предполагая, что структура довольно статична, чтобы получить предложение, попробуйте

$paragraphs = $xpath->query('//table[@id="previewTable"]/tr[2]/td/p');
if ($paragraphs->length > 0) { // check to make sure we got at least one node
    $sentence = $paragraphs->item(0)->nodeValue;
}

Получение ссылок немного сложнее

$links = $xpath->query('//table[@id="previewTable"]//td[@class="tdAttachment"]//a');
foreach ($links as $link) {
    $linkName = $link->nodeValue;
    $linkUrl = $link->getAttribute('href');

    // do something with these values
}
...