Как получить комментарии из XML-документа в PHP
Я хочу извлечь все комментарии ниже определенного узла в XML-документе, используя PHP. Я пробовал оба метода SimpleXML и DOMDocument, но я получаю пустые результаты. Есть ли способ получить комментарии из документа, не прибегая к Regex?
4 ответа
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);
}
У вас есть доступ к XPath API? XPath позволяет вам находить комментарии, используя (например)
//comment()
Используйте 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-файле.
Если вы используете анализатор событий SAX, у парсера должно быть событие для комментариев. Например, при использовании Expat вы реализуете обработчик и устанавливаете его, используя:
void XMLCALL
XML_SetCommentHandler(XML_Parser p,
XML_CommentHandler cmnt);