这是我需要根据模式xsd文件解析和验证的XML输出示例
<Record_Delimiter DocumentID="1.1" DocumentType="PARENT" DocumentName="SCHOOL" RelatedDocumentID=""/>
<xs:SCHOOL>
<xs:Name>some name</xs:Name>
<xs:ID>5908390481</xs:ID>
<xs:Address>some address</xs:Address>
</xs:SCHOOL>
<Record_Delimiter DocumentID="1.2" DocumentType="CHILD" DocumentName="STUDENTEXP" RelatedDocumentID="1.1"/>
<xs:STUDENTEXP>
<xs:STUDENT>
<xs:Name>some name</xs:Name>
<xs:SID>s1036456</xs:SID>
<xs:Age>12</xs:Age>
<xs:Address>some address</xs:Address>
<xs:Expenses>
<xs:Fees>800</xs:Fees>
<xs:Books>100</xs:Books>
<xs:Uniform>50</xs:Uniform>
<xs:Transport>10</xs:Transport>
</xs:Expenses>
</xs:STUDENT>
</xs:STUDENTEXP>
<Record_Delimiter DocumentID="1.3" DocumentType="CHILD" DocumentName="STUDENTEXP" RelatedDocumentID="1.1"/>
<xs:STUDENTEXP>
<xs:STUDENT>
<xs:Name>some name</xs:Name>
<xs:SID>s1036789</xs:SID>
<xs:Age>15</xs:Age>
<xs:Address>some address</xs:Address>
<xs:Expenses>
<xs:Fees>1000</xs:Fees>
<xs:Books>200</xs:Books>
<xs:Uniform>50</xs:Uniform>
<xs:Transport>10</xs:Transport>
</xs:Expenses>
</xs:STUDENT>
</xs:STUDENTEXP>
此文件本身不是有效的XML,因为没有单个标记包装所有其他标记。但是每个记录(即SCHOOL和STUDENTEXP)都是有效的XML,并且它根据模式(SCHOOL.xsd、STUDENTEXP.xsd)进行验证
我从来没有使用过这种格式,也不确定一些事情,比如如何以编程方式解析这样的文件? 通常使用lxml,我们可以验证每个记录是否位于单独的文件中:
xmlschema = etree.XMLSchema(etree.parse('./studentexp.xsd'))
xmlschema.assertValidate(etree.parse('./sampleStudentexp.xml'))
提取“记录”并分别验证它们的正确方法是什么
lxml具有基于标记的事件解析。 incremental-event-parsing 下面的方法奏效了
以前有人问过这个问题:Parse a xml file with multiple root element in python
我怀疑有一种单通道解决方案涉及到使用流解析器。我的Python不够强大,无法判断它是否可行。无论如何,该线程中的一个解决方案可能已经足够好了
相关问题 更多 >
编程相关推荐