如何使用python修改XML中的元素文本

2024-04-19 19:16:52 发布

您现在位置: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>

这是我在下面尝试的代码。在

^{pr2}$

据我所知,为了BBB芬德尔('BBB')[0]:

[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>

Tags: the代码文本元素dataisversionxml
3条回答

编辑:来自@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')

似乎能搞定。{{cd7}的有效性不需要检查。在

希望这有帮助。在

如果只需要更新单个标记,则不需要迭代所有标记。在

尝试:

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支持a limited sub-set of XPath。在

你可以用

bbb = tree.find("./AAA/CCC/BBB")
if bbb:
    # do something   

获取树中第一个这样的节点,或者

^{pr2}$

对它们进行迭代。在

相关问题 更多 >