亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過 python 替換 XML 節點

如何通過 python 替換 XML 節點

森欄 2023-05-09 10:06:35
我是 python 的新手,我有一個 - 也許 - 愚蠢的 XML 文件問題(是的,我試圖用谷歌搜索解決方案但沒有結果)。我必須編寫一個程序來替換/切換兩件事,所以首先,這是 XML 數據,它看起來像這樣:<data='qwerty'>    <name_it>some_name</name_it></data><next_data='next_qwerty'>    <name_it>another_name</name_it></next_data><next_next_data>...</next_next_data><next_xyz_data>...etc.我如何在 python 中更改some_name為data=''?所以它應該是這樣的:<data='some_name'>                            #changed from 'qwerty' to some_name    <name_it>some_name</name_it></data><next_data='another_name'>                    #changed from 'next_qwerty' to another_name    <name_it>another_name</name_it></next_data>如果這是一個愚蠢的問題,對此感到抱歉,但我真的用谷歌搜索了它,但我找不到解決方案。更新:這是我寫的幾行 python 代碼:from xml_file import datanew=""f = io.StringIO(data)  # data loadingfor r in f:     row = r.rstrip()     if 'name_it' in row:         change = row[row.index('name_it')] # maybe kind of len() or something    if "<data>" in row and change:         idx = row.index("<data>") + 6        new += row[:idx] + change + "name_it=\n"        change = ""      else:        new += row + "\n" # new line這是真正的 XML 數據:<?xml version="1.0" encoding="UTF-8"?><testsuite name="Setup">    <testcase classname="Configuration" name="xxx">        <data>abc_qwe</data>                       #change_me_to_"xxx"    </testcase>    <testcase classname="Configuration" name="yyy">        <data>xyzzzz</data>                        #change_me_to_"yyy"    </testcase></testsuite>有很多跡象。名字<data>...</data>應該在name="..."
查看完整描述

1 回答

?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

以下:


import xml.etree.ElementTree as ET


xml = '''<testsuite name="Setup">

    <testcase classname="Configuration" name="xxx">

        <data>abc_qwe</data>                      

    </testcase>

    <testcase classname="Configuration" name="yyy">

        <data>xyzzzz</data>                       

    </testcase>

</testsuite>'''



root = ET.fromstring(xml)

test_cases = root.findall('.//testcase')

for test_case in test_cases:

    test_case.find('./data').text = test_case.attrib['name']

    

ET.dump(root)

輸出


<testsuite name="Setup">

    <testcase classname="Configuration" name="xxx">

        <data>xxx</data>                      

    </testcase>

    <testcase classname="Configuration" name="yyy">

        <data>yyy</data>                       

    </testcase>

</testsuite>

另一種方式(用數據文本設置name屬性的值)


import xml.etree.ElementTree as ET


xml = '''<testsuite name="Setup">

    <testcase classname="Configuration" name="xxx">

        <data>data_1</data>                      

    </testcase>

    <testcase classname="Configuration" name="yyy">

        <data>data_2</data>                       

    </testcase>

</testsuite>'''



root = ET.fromstring(xml)

test_cases = root.findall('.//testcase')

for test_case in test_cases:

    test_case.attrib['name'] = test_case.find('./data').text

    

ET.dump(root)


查看完整回答
反對 回復 2023-05-09
  • 1 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號