首页 > 解决方案 > 在 PHP 中根据 XSD 1.1 模式验证 XML

问题描述

正如官方 PHP 文档所述:

DOMDocument::schemaValidate — 根据模式验证文档。仅支持 XML Schema 1.0。

话虽如此,我有一个 XML Schema 1.1 文件,我需要根据该文件验证我的 XML。到目前为止,我对解决方案的搜索一无所获,从类似问题的答案来看,libxml 似乎只支持 1.0,所以在这种情况下,任何使用 libxml 的东西都可能不起作用。

编辑:有关额外信息,架构包含以下内容(仅对 XML 1.1 有效,对 1.0 无效):

  <xs:element name="placeholder_1">
    <xs:complexType>
      <xs:all>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="placeholder_2" type="xs:string"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="placeholder_3" type="xs:string"/>
        <xs:element maxOccurs="1" minOccurs="0" name="placehoder_4" type="xs:string"/>
        <xs:element maxOccurs="1" minOccurs="0" name="placeholder_5" type="xs:string"/>
      </xs:all>
    </xs:complexType>
  </xs:element>

标签: phpxmlxsd

解决方案


您可以尝试如下所述,看看它是否有效?

将架构文件转换为字符串。

可以大致如下所述完成(可能是更好的方法)

$doc->load('schema.xsd');
$doc->save('schema.xml');
$xmlfile = file_get_contents('schema.xml');

然后使用DOMDocument::schemaValidateSourcewhich 将字符串作为输入。

https://www.php.net/manual/en/domdocument.schemavalidatesource.php

根据给定字符串中定义的模式验证文档。


推荐阅读