使用python在XML中合并文本时如何传递<br/>元素?

时间:2018-07-25 07:15:53

标签: python xml

我一直在尝试使用python将XML内容元素中的所有文本组合在一起。 我成功地合并了所有内容文本,但除了<'Br />元素正下方的内容外,还需要其他内容。 <'Br />元素表示在Adobe Indesign程序中输入。 该XML是从Adobe Indesign中导出的。

下面是示例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Story>
    <ParagraphStyleRange>
        <CharacterStyleRange>
            <Content>AAA</Content>
        </CharacterStyleRange>
        <CharacterStyleRange>
            <Content>BBB</Content>
        </CharacterStyleRange>
        <CharacterStyleRange>
            <Br />
            <Content>CCC</Content>
            <Br />
            <Content>DDD</Content>
        </CharacterStyleRange>
        <CharacterStyleRange>
            <Content>EEE</Content>
        </CharacterStyleRange>
        <CharacterStyleRange>
            <Br />
            <Content>FFF</Content>
            <Br />
        </CharacterStyleRange>
    </ParagraphStyleRange>
</Story>
</Root>

这就是我想要的:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Story>
    <ParagraphStyleRange>
        <CharacterStyleRange>
            <Content>AAA</Content>
        </CharacterStyleRange>
        <CharacterStyleRange>
            <Content>AAABBB</Content>
        </CharacterStyleRange>
        <CharacterStyleRange>
            <Br />
            <Content>CCC</Content>
            <Br />
            <Content>DDD</Content>
        </CharacterStyleRange>
        <CharacterStyleRange>
            <Content>DDDEEE</Content>
        </CharacterStyleRange>
        <CharacterStyleRange>
            <Br />
            <Content>FFF</Content>
            <Br />
        </CharacterStyleRange>
    </ParagraphStyleRange>
</Story>
</Root>

如您所见,如果要添加的内容正上方有<'Br />元素,我不想在下一个添加内容文本。

详细来说,第一个Content元素文本是AAA,下一个是BBB。 在这种情况下,应在BBB前面安装AAA。

并且BCC未附加在CCC前面,因为CCC内容正上方有<'Br />元素。

您能帮助我如何识别要传递的<'Br />元素吗?

到目前为止,这是我正在做的代码,但是效果不佳...

tree = ET.parse("C:\\Br_test.xml")
root = tree.getroot()

for ParagraphStyleRange in root.findall('.//Story/ParagraphStyleRange'):
    CharacterStyleRange_count = len(ParagraphStyleRange.findall('CharacterStyleRange'))
    #print(CharacterStyleRange_count)
    if int(CharacterStyleRange_count) >= 2 :
        try :
            Content_collect = ''
            for CharacterStyleRange in ParagraphStyleRange.findall('CharacterStyleRange'):

                Br_count = len(CharacterStyleRange.findall('Br'))
                print(Br_count)
                if int(Br_count) == 0 :
                    for Content in CharacterStyleRange.findall('Content'):
                        Content_collect += Content.text
                        Content.text = str(Content_collect)
                        print(Content_collect)
                #---- Code to delete Contents that are attached to next one---
                #for CharacterStyleRange in ParagraphStyleRange.findall('CharacterStyleRange')[:-1]:
                 #   for Content in CharacterStyleRange.findall('Content'):
                  #      Content_remove = CharacterStyleRange.remove(Content)
        except:
            pass

0 个答案:

没有答案