pythonxml文件解析比较

pythonxml文件解析比较,python,xml,xml-parsing,elementtree,Python,Xml,Xml Parsing,Elementtree,我必须使用Python比较两个XML文件。每个都有一个项目列表,我必须输出哪些项目没有同时出现在这两个列表中。每个项目都有不同的属性,需要一致同意才能确定它是否是同一个项目 哪种解析器最合适。它必须已经包含在Python2.7中。我看了etree,但它能让我轻松地做我想做的事情吗?或者还有其他更合适的吗。谢谢 这取决于,如果您的xml元素有子元素,并且该子元素也需要比较,请使用DOM 要比较的元素只有属性,使用SAX是最好的方法,我在这里发布了一些SAX代码,您可以参考: import xml.

我必须使用Python比较两个XML文件。每个都有一个项目列表,我必须输出哪些项目没有同时出现在这两个列表中。每个项目都有不同的属性,需要一致同意才能确定它是否是同一个项目


哪种解析器最合适。它必须已经包含在Python2.7中。我看了etree,但它能让我轻松地做我想做的事情吗?或者还有其他更合适的吗。谢谢

这取决于,如果您的xml元素有子元素,并且该子元素也需要比较,请使用DOM

要比较的元素只有属性,使用SAX是最好的方法,我在这里发布了一些SAX代码,您可以参考:

import xml.sax
from xml.sax.handler import ContentHandler

class TableHandler(ContentHandler):
    def __init__(self):
        self.columns = {}

    def startElement(self, name, attrs):
        if name == 'R':
            for k, v in attrs.items():
                if not self.columns.has_key(k):
                    self.columns[k] = []
                self.columns[k].append(v)

def xml_to_table(xml_str):
    handler = TableHandler()
    xml.sax.parseString(xml_str, handler)
    return handler.columns

if __name__ == '__main__':    
    txt = """<xml>
    <R CatalogId="8"/><R CatalogId="8"/><R CatalogId="7"/>
    </xml>
    """

    columns = xml_to_table(txt)
    print columns
import xml.sax
从xml.sax.handler导入ContentHandler
类TableHandler(ContentHandler):
定义初始化(自):
self.columns={}
def startElement(自身、名称、属性):
如果名称=='R':
对于attrs.items()中的k,v:
如果不是self.columns.has_键(k):
self.columns[k]=[]
self.columns[k].append(v)
def xml_to_表(xml_str):
handler=TableHandler()
parseString(xml_str,handler)
返回处理程序.columns
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
txt=”“”
"""
columns=xml\u to\u表(txt)
列印
您可以使用。您可以使用
xml.find(“.//itemname”)