如何在不验证包含文件的情况下验证我的xml文件?

时间:2015-10-08 21:37:02

标签: python xml validation schema xinclude

我有一个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>

0 个答案:

没有答案