Python 解析XML文件并根据xsd模式进行验证
这是我需要根据模式xsd文件解析和验证的XML输出示例Python 解析XML文件并根据xsd模式进行验证,python,xml,xsd,xmlschema,Python,Xml,Xsd,Xmlschema,这是我需要根据模式xsd文件解析和验证的XML输出示例 某个名字 5908390481 某个地址 某个名字 s1036456 12 某个地址 800 100 50 10 某个名字 s1036789 15 某个地址 1000 200 50 10 此文件本身不是有效的XML,因为没有单个标记包装所有其他标记。但是每个记录(即SCHOOL和STUDENTEXP)都是有效的XML,并且它根据模式(SCHOOL.xsd、STUDENTEXP.xsd)进行验证 我从来没有使用过这种格式,也不确定一些事情
某个名字
5908390481
某个地址
某个名字
s1036456
12
某个地址
800
100
50
10
某个名字
s1036789
15
某个地址
1000
200
50
10
此文件本身不是有效的XML,因为没有单个标记包装所有其他标记。但是每个记录(即SCHOOL和STUDENTEXP)都是有效的XML,并且它根据模式(SCHOOL.xsd、STUDENTEXP.xsd)进行验证
我从来没有使用过这种格式,也不确定一些事情,比如如何以编程方式解析这样的文件?
通常使用lxml,我们可以验证每个记录是否位于单独的文件中:
xmlschema=etree.xmlschema(etree.parse('./studentexp.xsd'))
assertValidate(etree.parse('./sampleStudentexp.xml'))
提取“记录”并分别验证它们的正确方法是什么 以前有人问过这个问题:
我怀疑有一种单通道解决方案涉及到使用流解析器。我的Python不够强大,无法判断它是否可行。无论如何-该线程中的一个解决方案可能已经足够好了。lxml具有基于标记的事件解析。 下面的方法奏效了
parser = etree.XMLPullParser(events=('start', 'end'))
events = parser.read_events()
with open('.\sample.xml', 'rb') as f:
d1 = deque()
for line in f:
parser.feed(line)
for action, e in events:
if action == 'start':
d1.append(e.tag)
elif action == 'end' and len(d1) == 1:
if d1.pop() == e.tag:
root = parser.close()
print(etree.tostring(root, pretty_print=True, encoding="UTF-8").decode("UTF-8"))
else:
d1.pop()