如何在python中根据xml标签获取文本?

Posted

技术标签:

【中文标题】如何在python中根据xml标签获取文本?【英文标题】:How to get the text based on xml tags in python? 【发布时间】:2021-03-18 12:42:41 【问题描述】:

这里是新手!

谁能帮我提取 XML 标记之间的文本 SAMPLE HEADING?还有一种方法可以根据 XML 标签中的标题 1 到标题 6 提取文本吗?如果是,如何考虑? 下面是它的 XML 代码:

<w:p w:rsidR="00000000" w:rsidDel="00000000" w:rsidP="00000000" w:rsidRDefault="00000000" w:rsidRPr="00000000" w14:paraId="00000033">
<w:pPr>
<w:pStyle w:val="Heading2"/>
<w:numPr>
<w:ilvl w:val="0"/>
<w:numId w:val="1"/>
</w:numPr>
<w:ind w:left="520" w:hanging="360"/>
<w:rPr>
<w:b w:val="1"/>
<w:color w:val="000000"/>
</w:rPr>
</w:pPr>
<w:r w:rsidDel="00000000" w:rsidR="00000000" w:rsidRPr="00000000">
<w:rPr>
<w:b w:val="1"/>
<w:color w:val="000000"/>
<w:rtl w:val="0"/>
</w:rPr>
<w:t xml:space="preserve">SAMPLE HEADING</w:t>
</w:r>
</w:p>

【问题讨论】:

【参考方案1】:

您可以将 XML 文件作为字典读取,然后您可以根据 XML 文件的元素解析字典。

作为示例:

import xmltodict

with open('file.xml') as xml:
  data = xmltodict.parse(xml_file.read())
  xml_file.close()

这将从您的 XML 文件中生成一个有序字典:

OrderedDict([('w:p',
              OrderedDict([('@w:rsidR', '00000000'),
                           ('@w:rsidDel', '00000000'),
                           ('@w:rsidP', '00000000'),
                           ('@w:rsidRDefault', '00000000'),
                           ('@w:rsidRPr', '00000000'),
                           ('@w14:paraId', '00000033'),
                           ('w:pPr',
                            OrderedDict([('w:pStyle',
                                          OrderedDict([('@w:val',
                                                        'Heading2')])),
                                         ('w:numPr',
                                          OrderedDict([('w:ilvl',
                                                        OrderedDict([('@w:val',
                                                                      '0')])),
                                                       ('w:numId',
                                                        OrderedDict([('@w:val',
                                                                      '1')]))])),
                                         ('w:ind',
                                          OrderedDict([('@w:left', '520'),
                                                       ('@w:hanging', '360')])),
                                         ('w:rPr',
                                          OrderedDict([('w:b',
                                                        OrderedDict([('@w:val',
                                                                      '1')])),
                                                       ('w:color',
                                                        OrderedDict([('@w:val',
                                                                      '000000')]))]))])),
                           ('w:r',
                            OrderedDict([('@w:rsidDel', '00000000'),
                                         ('@w:rsidR', '00000000'),
                                         ('@w:rsidRPr', '00000000'),
                                         ('w:rPr',
                                          OrderedDict([('w:b',
                                                        OrderedDict([('@w:val',
                                                                      '1')])),
                                                       ('w:color',
                                                        OrderedDict([('@w:val',
                                                                      '000000')])),
                                                       ('w:rtl',
                                                        OrderedDict([('@w:val',
                                                                      '0')]))])),
                                         ('w:t',
                                          OrderedDict([('@xml:space',
                                                        'preserve'),
                                                       ('#text',
                                                        'SAMPLE '
                                                        'HEADING')]))]))]))])

从这本词典中,您可以通过以下方式访问 SAMPLE HEADING: data['w:p']['w:r']['w:t']['#text']

【讨论】:

以上是关于如何在python中根据xml标签获取文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中读取具有特定标签属性的 xml?

如何根据单元格文本获取 UICollectionViewCell 的 indexPath?

如何根据后面的输入添加更多的标签?

如何通过 Selenium 和 Python 从 html 标签跨度获取文本

Python定位页面元素一个标签中有两个文本,如何定位其中一个文本

如何使用python的webdriver librairy获取标签的文本