我已经查看了几个关于如何读取XSD的线程,但是我没有得到一个合适的答案。
所以这是我的问题。我有一个包含include元素的 XSD 文件。因此,它使用多个模式位置。我想在php中读取该文件,以获取创建xml所需的所有必需元素。因此,我的第一步是如何读取XSD文件以获取所有元素,以创建xml文件。
简而言之,我想做什么。
- 读取XSD以获取创建xml所需的所有必需元素
- 用我的数据填充xml
- 保存xml
我想知道的
- 核心PHP能否做到这一点?
- 是否有任何现成的脚本可以做到这一点?
- 我应该创建一个自定义方法来完成这项工作吗?
我尝试过什么
我尝试使用DOMDOCUMENT加载xsd并读取文件,但它不包括多个模式位置文件。
这是我的示例xsd文件
主文件Test.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://w3school.com/"
targetNamespace="http://w3school.com/"
elementFormDefault="qualified"
version="2.1">
<xsd:include schemaLocation="Headers.xsd"/>
<xsd:element name="head">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Headers" type="Headers">
<xsd:annotation>
<xsd:documentation>
header
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
包含文件 Header.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://w3school.com/"
targetNamespace="http://w3school.com/"
elementFormDefault="qualified"
version="2.1">
<xsd:element name="Headers" type="Headers"/>
<xsd:complexType name="Headers">
<xsd:sequence>
<xsd:element name="version" minOccurs="1" default="1.0">
<xsd:annotation>
<xsd:documentation>
This indicates schema version associated with the XML
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="1.0" />
<xsd:enumeration value="0.10.8" />
<xsd:enumeration value="0.6" />
<xsd:enumeration value="0.1" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="requestId" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
request id
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="20"/>
<xsd:minLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
预期输出
<?xml version="1.0" encoding="UTF-8"?>
<head>
<Headers>
<version>1.0</version>
<requestId></requestId>
</Headers>
</head>