簡體   English   中英

如何使用python用新的給定元素更新現有的xml元素?

[英]How to update existing xml element with new given element using python?

我輸入了 XML 作為 country.xml:-

<root>
<set>
    <name>Countries</name>
    <elements>
    <name>US</name>
    <city>
        <val>New York</val>
        <val>Las Vegas</val>
    </city>
    </elements>
    <elements>
    <name>UK</name>
    <city>
        <val>London</val>
    </city>
    </elements>
</set>
</root>

我正在解析 xml 並將其放入一個列表中,並且我有一個字典,我正在根據該字典比較和添加 xml 元素。

diction: dict = {'US':['New York', 'Chicago'], 'UK':['OXFORD', 'London']}
source = etree.getroot()
for key,value in diction.items()
    countrylist = source.xpath('./elements/name[text()=\'{}\']/..'.format(key))
    if len(countrylist) == 0:
        # creating new string and element
        # appending element to original tree
    elif len(countrylist) == 1:   ###This is problematic case what to expect here to update key,value from dictionary only and replace the tag already present in xml
        key = countrylist[0]
    else:
        countinue

    # writebacktoxml(source,"country.xml")

我得到的輸出是原始輸入條件,因為它是特定條件的輸出。 預期輸出如下:-

<root>
<set>
    <name>Countries</name>
    <elements>
    <name>US</name>
    <city>
        <val>New York</val>
        <val>Chicago</val>
    </city>
    </elements>
    <elements>
    <name>UK</name>
    <city>
        <val>OXFORD</val>
        <val>London</val>
    </city>
    </elements>
</set>
</root>

評論:如果diction:{'AUSTRALIA': ['MELBOURNE']}呢? 我想將字典中的內容以及輸入 xml 中的內容保留到輸出 xml 中?

  • .clear周圍添加條件

    if name.text in ['AUSTRALIA']: # Keep the values pass else: table_category.clear()

問題:如何使用新的給定<val>...</val>更新現有的 xml 元素?

文檔: lxml.etree 教程 - E-factory
Python 文檔 - ElementTree XML API - 修改 XML 文件


  • 使用lxml示例

    from lxml import etree from lxml.builder import ElementMaker
  • 數據dict

     diction = {'US': ['New York', 'Chicago'], 'UK': ['OXFORD', 'London']}
  • 實例化一個ElementMaker對象和一個新的<val>...</val>對象。

     E = ElementMaker() VAL = E.val
  • 解析源xml

     tree = etree.parse(io.StringIO(xmlf)) root = tree.getroot()
  • 解析所有set/elements

     for element in root.findall('set/elements'):
  • 獲取此elementname

     name = element.find('name')
  • 獲取該elementtable_category.clear

     table_category = element.find('table_category') table_category.clear()
  • 循環從所有項目list中的diction的定義[name.text]

     for val in diction[name.text]:
  • 新的<val>val</val>附加到table_category

     table_category.append(VAL(val))

輸出print('{}'.format(etree.tostring(root, pretty_print=True).decode()))

 <configroot version="8.0"> <set> <name>Countries</name> <elements> <name>US</name> <table_category><val>New York</val><val>Chicago</val></table_category></elements> <elements> <name>UK</name> <table_category><val>OXFORD</val><val>London</val></table_category></elements> </set> </configroot>

用 Python 測試:3.5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM