您能否告诉我如何使用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(&#39; BBB&#39;)[0]:
这就是我想要的结果。
<?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>
答案 0 :(得分:1)
如果您只需要更新单个标记,则无需迭代所有标记。
<强>尝试:强>
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')
答案 1 :(得分:1)
ElementTree支持a limited sub-set of XPath。
您可以使用
bbb = tree.find("./AAA/CCC/BBB")
if bbb:
# do something
获取树中的第一个这样的节点,或
for bbb in tree.iterfind("./AAA/CCC/BBB"):
# do something
迭代所有这些。
答案 2 :(得分:0)
经过一些测试后,看起来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
的有效性,以避免崩溃。
希望这有帮助。
答案 3 :(得分:0)
你可以这样做:
allprojects {
repositories {
.....
......
maven { url 'https://maven.google.com' } // Add this line.
......
} }