通过php处理XML目录

时间:2011-05-10 08:00:52

标签: php xml dom xsd domdocument

我有一个包含多个文件的XSD(XML Schema)。系统的根目录中有一个catalog.xml,它是一个XML目录。它包含用于正确处理xsd文件所需的SYSTEM和URI目录定义。

现在我的问题:如何在php中针对这些模式验证xml?如果我只是使用 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 个答案:

答案 0 :(得分:4)

DOM使用下面的libxml。将LibXML should be able to use Catalog files放入/etc/xml/catalog时。 Windows IIRC上的路径相同。

随意支持我的功能请求,以便从PHP配置路径:

答案 1 :(得分:2)

您遇到的问题是PHP无法解析以下路径:

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

在您的系统中。

您可以使用PHP能够解析的内容替换此类URI的实例。

我想到的一件事是registering a stream wrapper,它会自动解析这些URI。

作为替代修复,您可以自己读取XSD文件并将其转换为DATA URI,然后使用新数据URI替换旧的urn: URI。一些示例代码:

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

希望这有帮助。