0

示例 XML:

<?xml version="1.0"?>
<book>
 <to>My Readers</to>
 <from>Chaitanya</from>
 <subject>A Message to my readers</subject>
 <message>Welcome to beginnersbook.com</message>
</book>

样本 XSD:

<xs:element name="book">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="subject" type="xs:string"/>
      <xs:element name="message" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>

这是代码

import xmlschema
import os
import pandas as pd
xml_file = os.path.join(os.getcwd(), 'sample.xml')
xld_file = os.path.join(os.getcwd(), 'sample.xsd')
schema = xmlschema.XMLSchema(xld_file)
if schema.is_valid(xml_file):
    try:
        my_dict = schema.to_dict(xml_file)
    except Exception as exception:
        print(exception)
else:
    print("Schema is not valid")
print(my_dict)

这是输出
{'to': 'My Readers', 'from': 'Chaitanya', 'subject': 'A Message to my readers', 'message': 'Welcome to beginnersbook.com'}

问题 XSD(嵌套 XSD):

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://services.mycccportal.com/CCC/CCCStandardEstimateWebService/EstimateTransaction" xmlns:common="http://services.mycccportal.com/CCC/CCCStandardEstimateWebService/CommonTypes" xmlns:msghdr="http://services.mycccportal.com/Interfaces/MessageHeader" targetNamespace="http://services.mycccportal.com/CCC/CCCStandardEstimateWebService/EstimateTransaction" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:import namespace="http://services.mycccportal.com/Interfaces/MessageHeader" schemaLocation="MessageHeader.xsd"/>
    <xs:import namespace="http://services.mycccportal.com/CCC/CCCStandardEstimateWebService/CommonTypes" schemaLocation="CCCEstimateCommonTypes.xsd"/>
    <xs:element name="CCCEstimateTransaction" type="CCCEstimateTransactionType"/>
    <xs:complexType name="CCCEstimateTransactionType">
        <xs:sequence>
            <xs:element name="MessageHeader" type="msghdr:MessageHeaderType"/>
            <xs:element name="Estimate" type="EstimateType"/>
        </xs:sequence>
        <xs:attribute name="Version" type="xs:string" use="required"/>
    </xs:complexType>

即使我将所有 XSD 都放在同一个文件夹中,我仍然收到嵌套 XSD 的“架构无效”,不确定xmlschema是否能够读取嵌套 XSD。我希望 xmlschema 读取嵌套的 XSD 并使用嵌套的 XSD 验证 XML 以将其转换为字典。

4

0 回答 0