【问题标题】:Handle XML Catalogs by php通过 php 处理 XML 目录
【发布时间】: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处理它的方法。

【问题讨论】:

    标签: php xml dom xsd domdocument


    【解决方案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 进行配置:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-24
        • 1970-01-01
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多