解析其中包含多个xmls的文件

时间:2011-04-16 14:12:23

标签: python xml

有没有办法解析包含多个xmls的文件?

例如,如果我有一个名为stocks.xml的文件,并且在stocks.xml中我有多个xml内容,有没有办法解析这个xml文件?

- stocks.xml

<?xml version="1.0" encoding="ASCII"?><PRODUCT><ID>A001</ID>..</PRODUCT><SHOP-1><QUANTITY>nn</QUANITY><SHOP-1><QUANTITY>nn</QUANITY>
<?xml version="1.0" encoding="ASCII"?><PRODUCT><ID>A002</ID>..</PRODUCT><SHOP-1><QUANTITY>nn</QUANITY><SHOP-1><QUANTITY>nn</QUANITY>

4 个答案:

答案 0 :(得分:3)

如果您可以假设每个xml文档都以<?xml version="1.0" ...开头,则只需逐行读取文件,查找与该模式匹配的行(或者,读取所有数据,然后通过数据)。

找到一行后,保留它,并附加后续行,直到找到下一个xml文档或者你点击了EOF。泡沫,冲洗,重复。

现在,您在字符串中有一个xml文档。然后,您可以使用普通的XML解析工具解析字符串,或者将其写入文件。

这在大多数情况下都可以正常工作,但当然,如果您的某个嵌入式xml文档包含的数据与文档开头的模式完全匹配,则可能会失败。很可能你不必担心这一点,如果你这样做,有办法以更聪明的方式避免这种情况。

正确的解决方案实际上取决于您的需求。如果您正在创建一个通用的必须工作的解决方案,这可能不适合您。对于现实世界,特殊目的问题,它可能不仅仅是足够好,而且通常足够好就足够了。

答案 1 :(得分:0)

你应该通过 Michiel de Hoon 看到这个python程序 如果你想解析多个文件,那么必须开发一个检测我们在其他xml中的规则,例如,首先你读<stocks> ....最后你必须重新{{1当你发现那时候还有别的东西,好吧,继续阅读并做同样的解析器,直到达到eof。

</stocks>

答案 2 :(得分:0)

所以你有一个包含多个XML文档的文件一个接一个?这是一个删除<?xml ?> PI并将数据包装在根标记中以将整个内容解析为单个XML文档的示例:

import re
import lxml.etree

re_strip_pi = re.compile('<\?xml [^?>]+\?>', re.M)
data = '<root>' + open('stocks.xml', 'rb').read() + '</root>'
match = re_strip_pi.search(data)
data = re_strip_pi.sub('', data)
tree = lxml.etree.fromstring(match.group() + data)
for prod in tree.xpath('//PRODUCT'):
    print prod

答案 3 :(得分:0)

您不能在一个XML文件中包含多个XML文档。将文档(以任何方式组成)拆分为单个XML文件并逐个解析。