我正在使用 Element Tree 来解析 XML 文件。我有多个 XML 文件。 XML 文件的元素由唯一键 (SKU) 标识,但其他标签不同。我想将对应于另一个文件中每个元素的标签组合起来。为此,我可以开始解析第一个 XML 的每个子元素并循环遍历其他文件的子元素以找到具有给定 sku 的元素:
tree = ET.parse(filename)
root = tree.getroot()
tree1 = ET.parse(filename1)
root1 = tree1.getroot()
...#more xmls
for child in root:
sku = child.find('SKU').text
for child1 in root1:
sku1 = child1.find('SKU').text
if sku == sku1:
#do something
但是我发现这种方法效率不高。有更好的方法吗?
谢谢
编辑:例如。第一个 xml 具有以下形式的元素:
<product>
<SKU>ABCD1234</SKU>
<_Image>something</_Image>
<_Image_Count>2</_Image_Count>
<_Image2>something</_Image2>
<_Image3>something</_Image3>
<_Orignal_Image>something</_Orignal_Image>
</product>
第二个 XML 具有以下形式的元素:
<product>
<Product_Code>ABCD1234</Product_Code>
<Designer>xxx</Designer>
<Taxon>yyy</Taxon>
<Parent_Taxon>zzz</Parent_Taxon>
<Taxonomy>aaa</Taxonomy>
<Quantity>1</Quantity>
<Cost>2</Cost>
<MRP>3</MRP>
<Price>4</Price>
</product>
我想合并这 2 个 XML 以获得:
<product>
<SKU>ABCD1234</SKU>
<_Image>something</_Image>
<_Image_Count>2</_Image_Count>
<_Image2>something</_Image2>
<_Image3>something</_Image3>
<_Orignal_Image>something</_Orignal_Image>
<Product_Code>ABCD1234</Product_Code>
<Designer>xxx</Designer>
<Taxon>yyy</Taxon>
<Parent_Taxon>zzz</Parent_Taxon>
<Taxonomy>aaa</Taxonomy>
<Quantity>1</Quantity>
<Cost>2</Cost>
<MRP>3</MRP>
<Price>4</Price>
</product>
最佳答案
写一个类来管理每种类型的xml文件。它应该有一个方法,该方法获取 SKU 列表并返回具有您感兴趣的属性的事物集合。
另一个获取该集合,并使用它修改它拥有的 xml。
elementTree
对 xml 的支持有限,但查看您的示例文件,findall
方法将是获取“sku”节点集合的良好开端。
不要尝试一次完成所有操作,打开每个文件并使用嵌套循环绝对不是正确的方法。
关于 python : How to combine data from multiple XML files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22273985/