通过 php 处理 XML 目录
Posted
技术标签:
【中文标题】通过 php 处理 XML 目录【英文标题】:Handle XML Catalogs by php 【发布时间】:2011-08-22 06:18:39 【问题描述】:我有一个包含多个文件的 XSD(XML 架构)。系统根目录下有一个catalog.xml,它是一个XML Catalog。它包含正确处理 xsd 文件所需的 SYSTEM 和 URI 目录定义。
现在我的问题是:如何在 php 中针对这些模式验证 xml?如果我简单地使用 DOMDocument->Schemavalidate() 并给它正确的 xsd,目录定义将无法解析,并且 php 会抛出如下错误:
警告:DOMDocument::schemaValidate(): I/O 警告:未能加载外部实体“urn:oasis:names:tc:dita:xsd:highlightDomain.xsd:1.2”
在catalog.xml中如何解析这个表达式,但我找不到用php处理它的方法。
【问题讨论】:
【参考方案1】:您面临的问题是 PHP 无法解析以下路径:
urn:oasis:names:tc:dita:xsd:highlightDomain.xsd:1.2
在您的系统中。
您可以将此类 URI 的实例替换为 PHP 能够解析的内容。
我想到的一件事是 registering a stream wrapper 会自动为您解析这些 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);
希望这会有所帮助。
【讨论】:
【参考方案2】:DOM 在下面使用 libxml。 LibXML should be able to use Catalog files 当它们被放置在/etc/xml/catalog
中时。 Windows IIRC 上的相同路径。
请随意支持我的功能请求,以使路径可从 PHP 进行配置:
Request #53950 - Add a way to configure where libxml searches for Catalog Files【讨论】:
以上是关于通过 php 处理 XML 目录的主要内容,如果未能解决你的问题,请参考以下文章