php - 在 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>
解决方案
您可以尝试如下所述,看看它是否有效?
将架构文件转换为字符串。
可以大致如下所述完成(可能是更好的方法)
$doc->load('schema.xsd');
$doc->save('schema.xml');
$xmlfile = file_get_contents('schema.xml');
然后使用DOMDocument::schemaValidateSource
which 将字符串作为输入。
https://www.php.net/manual/en/domdocument.schemavalidatesource.php
根据给定字符串中定义的模式验证文档。