Обрабатывать каталоги XML по php

У меня есть XSD (XML Schema), который содержит несколько файлов. В корне системы есть каталог.xml, который является каталогом XML. Он содержит определения каталога SYSTEM и URI, которые необходимы для правильной обработки файлов xsd.

Теперь мой вопрос: как я могу проверить xml против этих схем в php? Если я просто использую DOMDocument-> Schemavalidate () и даю ему правильный xsd, определения каталога не будут разрешены, а php выдает ошибку, подобную этой:

Warning: DOMDocument::schemaValidate(): I/O warning : failed to load external entity "urn:oasis:names:tc:dita:xsd:highlightDomain.xsd:1.2" 

Это в файле catalog.xml, как разрешить это выражение, но я не смог найти способ справиться с этим с помощью php.

DOM использует libxml внизу. LibXML должен иметь возможность использовать файлы Каталога, когда они помещаются в /etc/xml/catalog . Такой же путь на окнах IIRC.

Не стесняйтесь повышать свой запрос функции, чтобы сделать путь, настраиваемый с PHP:

  • Запрос # 53950 – добавьте способ настройки, где libxml ищет файлы каталога

Проблема, с которой вы сталкиваетесь, заключается в том, что PHP не может решить следующий путь:

 urn:oasis:names:tc:dita:xsd:highlightDomain.xsd:1.2 

в вашей системе.

Вы могли бы заменить экземпляры таких URI тем, что PHP может решить.

Одна вещь, которая приходит мне на ум, – это зарегистрировать обертку потока, которая автоматически разрешает эти URI.

В качестве альтернативного решения вы можете самостоятельно прочитать файлы XSD и преобразовать их в URI DATA, а затем заменить старый URI urn: URI новым URI данных. Пример кода:

  $name = 'file.xsd'; $path = '/path-to-file/'.$name; $data = file_get_contents($path); $file = 'data://text/plain;base64,'.base64_encode($data); 

Надеюсь это поможет.