使用python将现有子属性值替换为子标记值

2024-10-04 01:22:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够通过多个ReportCharacters进行解析,并确保所有人都在使用ReportCharactername属性中的characterID数字,而不是实际的字符名。你知道吗

如何解析和比较ReportCharacter name,如果CharacterID不存在,用相应的CharacterID值替换名称?你知道吗

这是一些示例原始文件:

'    <?xml version="1.0" ?>
    <CharacterData>
    <Report>
    <ReportCharacter name="scoobydoo">
    <CharacterProperties>
    <tag name="charactername">scoobydoo</tag>
    <tag name="characterID">1024724312</tag>
    <tag name="characterSTART">Sat Sep 15 02:01:56 2018</tag>
    </CharacterProperties>
    </ReportCharacter>
    <ReportCharacter name="mickey">
    <CharacterProperties>
    <tag name="charactername">mickey</tag>
    <tag name="characterID">1024724313</tag>
    <tag name="characterSTART">Sat Sep 15 02:01:56 2018</tag>
    </CharacterProperties>
    </ReportCharacter>
    <ReportCharacter name="goofy">
    <CharacterProperties>
    <tag name="charactername">goofy</tag>
    <tag name="characterID">1024724314</tag>
    <tag name="characterSTART">Sat Sep 15 02:01:56 2018</tag>
    </CharacterProperties>
    </ReportCharacter>
    </Report>
    </CharacterData>'

我希望修改后的文件是这样的:

'    <?xml version="1.0" ?>
    <CharacterData>
    <Report>
    <ReportCharacter name="1024724312">
    <CharacterProperties>
    <tag name="charactername">scoobydoo</tag>
    <tag name="characterID">1024724312</tag>
    <tag name="characterSTART">Sat Sep 15 02:01:56 2018</tag>
    </CharacterProperties>
    </ReportCharacter>
    <ReportCharacter name="1024724313">
    <CharacterProperties>
    <tag name="charactername">mickey</tag>
    <tag name="characterID">1024724313</tag>
    <tag name="characterSTART">Sat Sep 15 02:01:56 2018</tag>
    </CharacterProperties>
    </ReportCharacter>
    <ReportCharacter name="1024724314">
    <CharacterProperties>
    <tag name="charactername">goofy</tag>
    <tag name="characterID">1024724314</tag>
    <tag name="characterSTART">Sat Sep 15 02:01:56 2018</tag>
    </CharacterProperties>
    </ReportCharacter>
    </Report>
    </CharacterData>'

Tags: namereporttagsatsepcharacternamemickeycharacterid
1条回答
网友
1楼 · 发布于 2024-10-04 01:22:45
import xml.etree.ElementTree as ET

tree = ET.parse('characters.txt')
root = tree.getroot()

for character in root.iter('ReportCharacter'):
    current_name = character.get('name', '')
    if current_name.isdecimal():
        continue

    name = character.findtext('.//tag[@name="characterID"]')
    if name:
        character.set('name', name)

with open('characters_parsed.xml', 'w') as file_out:
    tree.write(file_out, encoding='unicode', short_empty_elements=True)

相关问题 更多 >