2014-10-06 61 views
0

我正在嘗試將產品和類別的XML文件導入到Magento。使用python編輯XML文件 - 用同一個文件中的屬性名稱替換代碼屬性

問題是,類別,顏色,大小等屬性被定義爲代碼,並且代碼規範在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> 

我很感激任何hel p,謝謝。

+0

我覺得這個問題太複雜了,不清楚,所以我簡化了一切。 – 2014-10-21 10:14:14

回答

1

對於這種類型的任務,Python是選項。我幾個月來一直在使用BeautifulSoup,使用它處理XML是一件輕而易舉的事情。

它也有一個不錯的和容易的documentation它可以幫助你處理任何你想要的XML。

+0

謝謝你,我剛剛開始使用Python,所以我想用Python的ElementTree使它更好。 – 2014-10-19 13:59:23

0

我現在有這個工作代碼,但正如我之前所說的,我是初學者,所以很高興看到並學習如何使它變得更好。我想,也許先掃描<密碼簿>然後製作某種字典,然後通過價格表並進行所有更改? 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") 

我也不能去工作循環內循環,使這就是爲什麼我做這工作的功能。

相關問題