Мне нужно проанализировать XML-документ, полученный от третьей стороны, с помощью php.Я не могу попросить разработчиков документа исправить его структуру.Когда я анализирую документ, используя simplexml_load_file
, документ XML пуст.
Вот упрощенный пример того, что я вижу.
my-file.xml:
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
<diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
aaa
</diffgr:diffgram>
</DataSet>
И я обрабатываю это так (из командной строки):
php > $xml = simplexml_load_file('my-file.xml');
php > print_r($xml);
SimpleXMLElement Object
(
)
Я ожидал, что структура XML отображается через print_r
.
Действительно, когда яудалите объявление пространства имен, кажется, что все работает (несмотря на некоторые ожидаемые предупреждения синтаксического анализа XML):
my-file-nonamespace.xml:
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
<diffgr:diffgram>
aaa
</diffgr:diffgram>
</DataSet>
Обрабатывает его одинаково в командной строке(со снятыми предупреждениями):
php > $xml = simplexml_load_file('my-file-nonamespace.xml');
// a bunch of xml parse warnings
php > print_r($xml);
SimpleXMLElement Object
(
[diffgr:diffgram] =>
aaa
)
Итак, проблема связана с неверным объявлением пространства имен.Возможно, я могу использовать регулярное выражение в файле, чтобы удалить объявление пространства имен перед синтаксическим анализом, но это не то направление, в котором я хочу идти.
Каков наилучший способ правильного анализа первого документа в PHP?