使用python编辑XML文件 - 将代码属性替换为同一文件中的属性名称

时间:2014-10-06 09:08:49

标签: python xml magento

我正在尝试将包含产品和类别的XML文件导入Magento。

问题是,类别,颜色,大小等属性被定义为代码,代码规范位于XML文件的末尾,因为< codebook>。

我正在寻找使用Python的解决方案如何用<中的属性名替换代码码本>

这是一个例子:

原始XML:

<pricelist>
<item>
  <category>
    <item code="1250" l1="0010" />
    <item code="0610" l1="0010" />
  </category>
 </item>
</pricelist>

<codebook>
 <category>
  <item code="0010" parent="">Catalogue 2015</item>
  <item code="0600" parent="0010">Office</item>
  <item code="1200" parent="0010">Time and temperature measuring</item>
  <item code="1210" parent="1200">Watches and watch sets</item>
  <item code="1250" parent="1200">desktop watches, alarms</item>
  <item code="0610" parent="0600">office table stuff</item>
 </category>
</codebook>
</body>
</pricelist>

所需的输出XML:

   <pricelist>
    <item>
      <category>
        <item>Catalogue 2015 | Time and temperature measuring | desktop watches, alarms</item>
        <item>Catalogue 2015 | Office | office table stuff</item>
      </category>
    </item>
   </pricelist>

感谢您的帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

对于这种任务,Python是可选的。几个月来我一直在使用BeautifulSoup,用它来处理XML是一件轻而易举的事。

它还有一个简单易用的documentation,它可以帮助您处理任何类型的XML。

答案 1 :(得分:0)

我现在有这个工作代码,但正如我之前所说,我是初学者,所以看到并学习如何让它变得更好会很棒。我想,也许首先扫描&lt;码本&gt;并制作某种字典,然后通过价格表并进行所有更改? xml非常大,所有规格的码本都很大。

这是我制作的代码,它可以产生预期的结果:

import xml.etree.cElementTree as ET
tree = ET.ElementTree(file='DGTip_short.xml')
root = tree.getroot()

    def searchforparentofparent(category):
        global parentofparentname
        for elem in tree.iterfind('codebook/category/item'):
            parentofparent = elem.get('parent')
            codetemp = elem.get('code')
            if category == codetemp:  
                parentofparentname = root.findtext('codebook/category/item[@code="'+ parentofparent +'"]')

    for elem in tree.iterfind('pricelist/item/category/item'):
        parent = elem.get('l1')
        category = elem.get('code')
        parentname = root.findtext('codebook/category/item[@code="'+ parent +'"]')
        categoryname = root.findtext('codebook/category/item[@code="'+ category +'"]')
        searchforparentofparent(category)

        magentoattrib = parentname + " | " + parentofparentname + " | " + categoryname
        elem.text = (magentoattrib)
        del elem.attrib['code']
        del elem.attrib['l1']

    tree.write('PriceList2.xml', "UTF-8")

我也无法在循环内部循环工作,这就是为什么我制作了有效的功能。