Зачистка с использованием PHP + SimpleXML ... Я могу получать изображения, но не необработанный текст? - PullRequest
2 голосов
/ 01 января 2009

Я пытаюсь получить определенный фрагмент необработанного текста с веб-сайта. Используя этот сайт и другие источники, я узнал, как получать определенные изображения, используя simpleXML и xpath.

Однако тот же подход, похоже, не работает для захвата необработанного текста. Вот что сейчас НЕ работает.

// first I set the xpath of the div that contains the text I want
$xpath = '//*[@id="storyCommentCountNumber"]';

// then I create a new DOM Document
$html = new DOMDocument();

// then I fetch the file and parse it (@ suppresses warnings).
@$html->loadHTMLFile($url);

// then convert DOM to SimpleXML
$xml = simplexml_import_dom($html);   

// run an XPath query on the div I want using the previously set xpath
$commcount = $xml->xpath($xpath);
print_r($commcount);

Теперь, когда я получаю изображение, этот объект commcount будет возвращать массив, содержащий где-то источник изображений.

В этом случае я хочу, чтобы этот объект возвращал необработанный текст, содержащийся в div "storyCommentCountNumber". Но этот текст, кажется, не содержится в объекте, только название Div.

Что я делаю не так? Я могу видеть, что этот подход предназначен только для захвата HTML-элементов и битов внутри них, а не для необработанного текста. Как мне получить текст внутри этого div?

Спасибо!

Ответы [ 5 ]

2 голосов
/ 02 января 2009

Следует отметить, что когда вы используете print_r или var_dump для объектов SimpleXML, вы не увидите «текст» объекта (или иногда атрибуты). Таким образом, чтобы увидеть все , вы должны вывести полную строку XML, используя $ variable-> AsXml ().

И чтобы получить текст, вам нужно привести объект SimpleXml к строке. Это автоматически вытягивает внутренний текст.

 /* remember $commcount is always an array from the xpath */
 foreach($commcount as $str)
 {
     echo (string)$str;
 }

Надеюсь, вышесказанное поможет вам начать.

1 голос
/ 28 января 2009

Я знаю, что вы пытаетесь использовать SimpleXML, но я думаю, что захват необработанного текста будет проще с регулярным выражением.

1 голос
/ 01 января 2009

Можете ли вы включить образец HTML (включая несколько строк до и после выбранного элемента?) И вывод из print_r ()?

Вы можете попробовать следующее, чтобы увидеть, поможет ли это вам:

if ( count($commcount) > 0 ) {
    $divContent = $commcount[0]->asXml();
    print $divContent;
}
0 голосов
/ 28 января 2009

Необработанный текст внутри элемента div не является частью самого элемента div, скорее он является частью первого дочернего узла элемента div. Внутри div должен быть текстовый узел, содержащий искомые данные.

0 голосов
/ 01 января 2009

Попробуйте проверить эту страницу.

:)

...