我有一个包含多个文件的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处理它的方法。
答案 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);
希望这有帮助。