[英]How to modify element text in XML using python
你能給我一些建議如何使用 python 修改 XML 中的元素文本嗎? 如果我想在第一個 BBB 元素的文本前面插入其他文本,我應該在下面的代碼中更改哪一部分?
請不要使用 fromstring 和其他模塊(例如 lxml)。
這是下面的示例 XML。
<?xml version="1.0"?>
<data>
<AAA>
<CCC>
<BBB>This</BBB> ----> the first BBB element
</CCC>
<CCC>
<BBB>is</BBB>
</CCC>
<CCC>
<BBB>test1</BBB>
</CCC>
</AAA>
<AAA>
<CCC>
<BBB>This is test</BBB>
</CCC>
</AAA>
</data>
它是我在下面嘗試的代碼。
import xml.etree.ElementTree as ET
import re
tree = ET.parse("C:\\test\\python test\\data_text.xml")
root = tree.getroot()
for AAA in root.findall('AAA'):
for CCC in AAA.findall('CCC'):
for BBB in CCC.findall('BBB')[0]:
BBB_text = '11111' + BBB.text
print(BBB_text)
tree.write('C:\\test\\python test\\output.xml')
據我所知,對於 CCC.findall('BBB')[0] 中的 BBB:
這就是我想要的結果。
<?xml version="1.0"?>
<data>
<AAA>
<CCC>
<BBB>11111This</BBB> ----> the first BBB element
</CCC>
<CCC>
<BBB>is</BBB>
</CCC>
<CCC>
<BBB>test1</BBB>
</CCC>
</AAA>
<AAA>
<CCC>
<BBB>This is test</BBB>
</CCC>
</AAA>
</data>
如果您只需要更新單個標簽,則無需迭代所有標簽。
嘗試:
import xml.etree.ElementTree as ET
tree = ET.parse(filename)
root = tree.getroot()
for AAA in root.findall('AAA'):
if AAA.find('CCC'):
BBB = AAA.find('CCC').find('BBB')
BBB.text = '33333' + BBB.text
tree.write('C:\\test\\python test\\output.xml')
ElementTree
支持XPath 的有限子集。
您可以使用
bbb = tree.find("./AAA/CCC/BBB")
if bbb:
# do something
獲得樹中第一個這樣的節點,或者
for bbb in tree.iterfind("./AAA/CCC/BBB"):
# do something
遍歷所有這些。
免責聲明: @Tomalak 的 XPath 回答更加優雅!
經過一些測試,看起來CCC.findall('BBB')[0]
工作正常。 由於您希望文檔中的第一個BBB
標記而不是每個AAA
標記中的標記,因此我會松開for
循環並修改我的注釋中的位。 我懂了:
import xml.etree.ElementTree as ET
import re
tree = ET.parse("data_text.xml")
root = tree.getroot()
AAA = root.find('AAA')
CCC = AAA.find('CCC')
BBB = CCC.find('BBB')
BBB.text = '11111' + BBB.text
print(BBB.text)
tree.write('output.xml')
似乎可以解決問題。 如果 XML 不包含此類標簽,您可能需要檢查AAA
、 BBB
和CCC
的有效性以避免崩潰。
希望這可以幫助。
那么你可以這樣做:
for a in tree:
for c in a:
for b in c:
b.text = '11111' + b.text
break
break
break
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.