Вопрос по php, parsing, html – PHP DOMDocument как получить элемент?

0

Я пытаюсь прочитать содержимое веб-сайта, но у меня есть проблема: я хочу получить изображения, связать эти элементы, но я хочу получить элементы сами по себе, а не содержимое элемента, например, я хочу получить это: я хочу получить все это элемент.

Как я могу это сделать..

<?php

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, "http://www.link.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $output = curl_exec($ch);

    $dom = new DOMDocument;
    @$dom->loadHTML($output);

    $items = $dom->getElementsByTagName('a');

    for($i = 0; $i < $items->length; $i++) {
        echo $items->item($i)->nodeValue . "<br />";
    }

    curl_close($ch);;
?>
Я знаю об этом, и это облегчит мою жизнь, но я думаю, что часть кода может быть продана, и я не знаю, смогу ли я отправить библиотеку вместе с ней. Sterling Duchess
Не отклоняюсь от вашего вопроса, но я предлагаю использовать PHP Simple HTML DOM Parser. Это делает кодирование намного проще.simplehtmldom.sourceforge.net/manual.htm Norse
Мне нужно знать, как получить весь элемент Sterling Duchess

Ваш Ответ

2   ответа
1

serialized html ДОМАЛЕМЕНТ? Например. Вы хотите строку, содержащую<a href="http://example.org">link text</a>? (Пожалуйста, проясните свой вопрос.)

$url = 'http://example.com';
$dom = new DOMDocument();
$dom->loadHTMLFile($url);

$anchors = $dom->getElementsByTagName('a');

foreach ($anchors as $a) {
    // Best solution, but only works with PHP >= 5.3.6
    $htmlstring = $dom->saveHTML($a);

    // Otherwise you need to serialize to XML and then fix the self-closing elements
    $htmlstring = saveHTMLFragment($a);
    echo $htmlstring, "\n";
}


function saveHTMLFragment(DOMElement $e) {
    $selfclosingelements = array('></area>', '></base>', '></basefont>',
        '></br>', '></col>', '></frame>', '></hr>', '></img>', '></input>',
        '></isindex>', '></link>', '></meta>', '></param>', '></source>',
    );
    // This is not 100% reliable because it may output namespace declarations.
    // But otherwise it is extra-paranoid to work down to at least PHP 5.1
    $html = $e->ownerDocument->saveXML($e, LIBXML_NOEMPTYTAG);
    // in case any empty elements are expanded, collapse them again:
    $html = str_ireplace($selfclosingelements, '>', $html);
    return $html;
}

Однако обратите внимание, что то, что вы делаете, опасно, потому что потенциально может смешивать кодировки. Лучше иметь ваш вывод в качестве другого DOMDocument и использоватьimportNode() скопировать узлы, которые вы хотите. Или используйте таблицу стилей XSL.

0

что вы просто скопировали пример кода и не пытались узнать, как он на самом деле работает ...

Во всяком случае,->nodeValue part берет элемент и возвращает текстовое содержимое (потому что элемент имеет один дочерний текстовый узел - если у него есть что-то еще, я не знаю, чтоnodeValue даст).

Итак, просто удалите->nodeValue и у вас есть свой элемент.

В этом случае, если у вас PHP 5.3.6 или новее, используйте$dom->saveHTML($items->item($i)); (docs)
Это то, что я не могу распечатать. Говорит, что это не строка тогда Sterling Duchess
Ну, я читаю следующее & lt; img src = & quot; URL изображения & quot; / & GT; прямо сейчас я хочу распечатать это, чтобы показать изображение, поэтому я читаю элемент img и его URL, и если я повторяю его, он должен показать изображение. Sterling Duchess
Вы хотите элемент,DOMElement это элемент. Это не строка, поэтому я не уверен, что вы ожидаете, что она будет напечатана. Отредактируйте свой вопрос с примером желаемого результата, чтобы нам не приходилось угадывать, что вы пытаетесь сказать.
Объект класса DOMElement не может быть преобразован в строку в Sterling Duchess

Похожие вопросы