Как получить комментарии из XML-документа в Stack Overflow

Я хочу извлечь все комментарии ниже определенного узла в XML-документе, используя PHP. Я попробовал оба метода SimpleXML и DOMDocument, но я получаю пустые результаты. Есть ли способ получить комментарии из документа, не прибегая к Regex?

2

Решение

SimpleXML не может обрабатывать комментарии, но расширение DOM может. Вот как вы можете извлечь все комментарии. Вам просто нужно адаптировать выражение XPath, чтобы выбрать нужный вам узел.

$doc = new DOMDocument;
$doc->loadXML(
'<doc>
<node><!-- First node --></node>
<node><!-- Second node --></node>
</doc>'
);

$xpath = new DOMXPath($doc);

foreach ($xpath->query('//comment()') as $comment)
{
var_dump($comment->textContent);
}
5

Другие решения

У вас есть доступ к XPath API? XPath позволяет вам находить комментарии, используя (например)

//comment()
2

Если вы используете анализатор событий SAX, у парсера должно быть событие для комментариев. Например, при использовании Expat вы реализуете обработчик и устанавливаете его, используя:

void XMLCALL
XML_SetCommentHandler(XML_Parser p,
XML_CommentHandler cmnt);
0

Используйте XMLReader. Комментарии могут быть легко обнаружены / найдены, они являются элементами xml типа COMMENT.
Подробнее см. Документация PHP: класс XMLReader

Пример кода:

$reader = new XMLReader();
$reader->open('filename.xml');
while ($reader->read()){
if ($reader->nodeType == XMLReader::COMMENT) {
$comments[] = $reader->readOuterXml();
}
}

А в массиве $ comments у вас будут все комментарии, найденные в файле XML.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector