我有一个python脚本,使用xml架构验证我的xml文件(文件“a”)。它工作得很好,现在我想在原始的xml(文件“a”)中包含另一个xml文件(文件“b”)。问题是,我想验证文件“a”而不验证包含的文件“b”。
这可能吗?
Python代码:
from lxml import etree
xsd_doc=etree.parse('shiporder.xsd')
xsd = etree.XMLSchema(xsd_doc)
xml_file = etree.parse('file_a.xml')
xsd.validate(xml_file)
print(xsd.error_log)
XML架构:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="file_input" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="xi:include" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
XML文件“a”:
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xi="http://www.w3.org/2003/XInclude"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<file_input>
<xi:include href="shiporder2.xml" parse="xml"/>
</file_input>
<orderperson name=" John Smitha">John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>