2017-07-08 9 views
0

私はこのようなPythonのファイルにサブ要素の値を変更する必要があります。パイソン - XMLファイル内の要素の値を変更するとのトラブル

<stock> 
    <product code="002"> 
    <title>Electric</title> 
    <tracks>Wild flower,Peace dog,Electric ocean</tracks> 
    <price>30.50</price> 
    <pictures>002.gif</pictures> 
    <entry>12/06/2017</entry> 
    <artist>The Cult</artist> 
    <descr>Nice rock album</descr> 
    <genre>Hard Rock</genre> 
    <extras>Astbury,vocals Duffy,guitar Stewart,bass Warner,drums</extras> 
    <copies>8</copies> 
    </product> 
</stock> 

私はコピーの数を減少させる必要がある、私はこの方法を書きました、 ElementTreeライブラリのドキュメント以下:

@staticmethod 
def decrease_copies(prod_id): 
    from store.classes.Product import Product 
    tree = XMLUtil.parse_file(PROD_FILENAME) 
    bought = Product.fetch_from_xml(prod_id) 
    left_copies = int(bought.copies) - 1 
    for prod in XMLUtil.get_xml_root(PROD_FILENAME).iter('product'): 
     if prod.attrib.get('code') == prod_id: 
      cps = prod.find('copies') 
      cps.text = str(left_copies) 
      print(tree) 
      tree.write(PROD_FILENAME) 
      break 

オブジェクトboughtは、XMLファイル内のフィールドとして全てのタグを含む製品クラスのインスタンスであり、PROD_FILENAMEは、ファイルのパスです。メソッドXMLUtilparse_fileの名前は、ファイルのツリーを返します。

エラーは発生していませんが、購入をシミュレートするときにファイルが変更されていません。誰かが間違っていることを教えてくれますか?私は.usuallyすべてのあなたの操作を終了し、元のfile.whenを変更しないlxml使用

答えて

0

は、新しいファイルを作成し、以下のcode.it作業罰金をit.testに書き込みます。

from lxml import etree 
f = '''<stock> 
    <product code="002"> 
    <title>Electric</title> 
    <tracks>Wild flower,Peace dog,Electric ocean</tracks> 
    <price>30.50</price> 
    <pictures>002.gif</pictures> 
    <entry>12/06/2017</entry> 
    <artist>The Cult</artist> 
    <descr>Nice rock album</descr> 
    <genre>Hard Rock</genre> 
    <extras>Astbury,vocals Duffy,guitar Stewart,bass Warner,drums</extras> 
    <copies>8</copies> 
    </product> 
</stock>''' 
root = etree.XML(f) 
product = root.find(".//product[@code]") 
cope = product.find("./copies") 
cope.text = str(9) 
doc = etree.ElementTree(root) 
outFile = open('D://test.xml', 'wb') 
doc.write(outFile) 
関連する問題