我正在尝试将包含产品和类别的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>
感谢您的帮助,谢谢。
答案 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")
我也无法在循环内部循环工作,这就是为什么我制作了有效的功能。