Я хочу извлечь все комментарии ниже определенного узла в XML-документе, используя PHP. Я пробовал методы SimpleXML и DOMDocument, но все равно получаю пустые выходные данные. Есть ли способ получить комментарии из документа, не прибегая к регулярному выражению?
Как получить комментарии из XML-документа в PHP
Ответы (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);