Обрабатывать XML-каталоги с помощью php - PullRequest
4 голосов
/ 10 мая 2011

У меня есть XSD (схема XML), которая содержит несколько файлов. В корневом каталоге системы находится catalog.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.

Ответы [ 2 ]

4 голосов
/ 10 мая 2011

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

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

2 голосов
/ 10 мая 2011

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

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

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

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

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

КакАльтернативное исправление: вы можете самостоятельно прочитать файлы XSD и преобразовать их в 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);

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

...