Я пытался найти подтверждение файла XSD с файлом XML. Но, к сожалению, я получаю только первое отличие при проверке файлов. Я использую asssertValid (), который дает только первое отличие, то есть "Панель" из файла. Следует найти все различия, т. Е. «Панель» и «Подпанель». Я хочу, чтобы все различия валидации в файле журнала. Не могли бы вы помочь мне найти все различия.
Python Код
from lxml import etree
import traceback
def validate_xml_and_xsd_files(xml_path: str, xsd_path: str):
result = False
try:
xmlschema_doc = etree.parse(xsd_path)
xmlschema = etree.XMLSchema(xmlschema_doc)
xml_doc = etree.parse(xml_path)
result = xmlschema.validate(xml_doc)
xmlschema.assertValid(xml_doc)
except Exception as ex:
print("Exception raised-->", ''.join(traceback.format_exception(etype=type(ex), value=ex, tb=ex.__traceback__)))
finally:
return result
if __name__ == "__main__":
file_path = "C:\\Users\\"
source_file_path = file_path + 'outputmetadata.xml'
schema_file_path = file_path + 'XMLValidator.xsd'
if validate_xml_and_xsd_files(source_file_path, schema_file_path):
print('Validation Successful w.r.t XML and XSD files.')
else:
print('Validation Unsuccessful w.r.t XML and XSD files')
XML Файл
<?xml version="1.0" encoding="UTF-8"?>
<dataFeedDeliveryMetaData>
<source>
<setting name="countryCode" serializeAs="String">
<value>IND</value>
</setting>
<setting name="startDateOfData" serializeAs="String">
<value>2012/12/31</value>
</setting>
<setting name="endDateOfData" serializeAs="String">
<value>2013/03/24</value>
</setting>
<setting name="currency" serializeAs="String">
<value>INR</value>
</setting>
</source>
<delivery>
<panels>
<panel>
<setting type="PersonName">Vikas</setting>
<setting type="Gender">Male</setting>
</panel>
<panel>
<setting type="PersonName">Akash</setting>
<setting type="Gender">Male</setting>
</panel>
<pane>
<setting type="PersonName">Divya</setting>
<setting type="Gender">Female</setting>
</pane>
<subpanel>
<setting type="PersonName">Manikanta</setting>
<setting type="Gender">Male</setting>
</subpanel>
</panels>
<setting name="JobType" serializeAs="String">
<value>FullTime</value>
</setting>
</delivery>
XSD файл
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="dataFeedDeliveryMetaData">
<xs:complexType>
<xs:sequence>
<xs:element name="source">
<xs:complexType>
<xs:sequence>
<xs:element name="setting" maxOccurs="4" minOccurs="4">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="value"/>
</xs:sequence>
<xs:attribute name="name" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="countryCode"/>
<xs:enumeration value="startDateOfData"/>
<xs:enumeration value="endDateOfData"/>
<xs:enumeration value="currency"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute type="xs:string" name="serializeAs" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="settingNameAttribute">
<xs:selector xpath="setting"/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
<xs:element name="delivery">
<xs:complexType>
<xs:sequence>
<xs:element name="panels">
<xs:complexType>
<xs:sequence>
<xs:element name="panel" minOccurs="3" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="setting" maxOccurs="2" minOccurs="2">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="PersonName"/>
<xs:enumeration value="Gender"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="panelTypeAttribute">
<xs:selector xpath="setting"/>
<xs:field xpath="@type"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="setting" maxOccurs="2" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="value"/>
</xs:sequence>
<xs:attribute name="name" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="JobType"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute type="xs:string" name="serializeAs" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
Выход