Разбор XML-подобного документа с помощью PHP DOMDocument - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь проанализировать XML-структуру индекса EPUB с PHP DOMDocument как

$doc = new DOMDocument();
$xml = '
      <navPoint playOrder="1" id="np-1">
        <navLabel>
          <text>I</text>
        </navLabel>
        <content src="/1.html"/>
      </navPoint>
      <navPoint playOrder="2" id="np-2">
        <navLabel>
          <text>II</text>
        </navLabel>
        <content src="/2.html"/>
      </navPoint>
';

@$doc->loadHTML('<?xml encoding="utf-8" ?>
<html><head></head><body>' . $xml . '</body></html>');

$output = $doc->getElementsByTagName('navPoint');

print_r($output);

, но она возвращает

DOMNodeList Object
(
    [length] => 0
)

Что я сделал не такчто он не анализирует его как простой HTML-документ?

PS Я тоже пробовал синтаксический анализатор PHP XML, но, поскольку это не настоящий XML-документ, он выдает ошибки из-за неверного XML.Поэтому я предпочитаю рассматривать его как HTML-документ.

1 Ответ

0 голосов
/ 27 декабря 2018

Вы ищете loadXML, а не loadHTML.

Не нужно окружать все тегами HTML, просто вместо этого добавьте фиктивный элемент <root>, потому что любойдопустимый XML-документ должен иметь его (вы также можете добавить его в саму переменную $xml).

Кроме того, использование @ перед тем, как в 99% случаев следует избегать вызовов функций, предотвращает просмотр /понимание того, что не так.

Следующее должно сделать это:

$doc->loadXML('<root>' . $xml . '</root>');

Демонстрация здесь: https://3v4l.org/s8QvM

...