通过 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 目录的主要内容,如果未能解决你的问题,请参考以下文章

循环目录以处理多个 XML 文件

PHP文件处理 目录与文件处理

记一次800多万XML文本文件预处理经历

php生成sitemap.xml地图文件

php生成sitemap.xml地图文件

php生成sitemap.xml地图文件