如何列出para元素中呈现的数据?附XML示例
提取XML中
<para>元素及嵌套列表数据的方法 嘿,我来帮你搞定这个问题!要提取<para>标签里的内容,包括它嵌套的<list>列表项,用Python的原生库或者XPath都能轻松实现,下面给你具体的操作方案:
先整理你的原始XML结构
首先把你提供的XML转成可解析的格式(去掉转义符):
<para>In this appeal against the judgment of Tribunal: <list> <listitem> <listnum>(a)</listnum> <listbody>Ajeet</listbody> </listitem> <listitem> <listnum>(b)</listnum> <listbody>Kumar</listbody> </listitem> <listitem> <listnum>(c)</listnum> <listbody>Singh</listbody> </listitem> <listitem> <listnum>(d)</listnum> </listitem> </list> </para>
方法一:用Python原生的xml.etree.ElementTree库
这是Python自带的XML解析工具,不用额外安装,步骤如下:
- 导入库并解析XML
- 定位到
<para>元素,提取开头的文本内容 - 遍历
<list>下的所有<listitem>,提取序号和对应的内容(注意处理空的listitem)
代码示例:
import xml.etree.ElementTree as ET # 你的XML字符串(如果是文件可以用ET.parse()) xml_str = ''' <para>In this appeal against the judgment of Tribunal: <list> <listitem> <listnum>(a)</listnum> <listbody>Ajeet</listbody> </listitem> <listitem> <listnum>(b)</listnum> <listbody>Kumar</listbody> </listitem> <listitem> <listnum>(c)</listnum> <listbody>Singh</listbody> </listitem> <listitem> <listnum>(d)</listnum> </listitem> </list> </para> ''' # 解析XML root = ET.fromstring(xml_str) # 提取<para>开头的文本内容 para_text = root.text.strip() print(f"Para内容:{para_text}") # 提取嵌套的列表项 print("\n列表数据:") for listitem in root.findall('.//listitem'): listnum = listitem.find('listnum').text.strip() # 处理没有listbody的情况 listbody = listitem.find('listbody').text.strip() if listitem.find('listbody') is not None else "无内容" print(f"{listnum} {listbody}")
运行这段代码后,你会得到这样的输出:
Para内容:In this appeal against the judgment of Tribunal: 列表数据: (a) Ajeet (b) Kumar (c) Singh (d) 无内容
方法二:用lxml库结合XPath查询(更灵活)
如果你需要更复杂的XML查询,lxml库的XPath支持更强大,需要先安装:pip install lxml
代码示例:
from lxml import etree xml_str = ''' <para>In this appeal against the judgment of Tribunal: <list> <listitem> <listnum>(a)</listnum> <listbody>Ajeet</listbody> </listitem> <listitem> <listnum>(b)</listnum> <listbody>Kumar</listbody> </listitem> <listitem> <listnum>(c)</listnum> <listbody>Singh</listbody> </listitem> <listitem> <listnum>(d)</listnum> </listitem> </list> </para> ''' # 解析XML tree = etree.fromstring(xml_str) # 用XPath提取para文本 para_text = tree.xpath('string(./text())').strip() print(f"Para内容:{para_text}") # 用XPath提取所有列表项的序号和内容 print("\n列表数据:") list_items = tree.xpath('.//listitem') for item in list_items: num = item.xpath('./listnum/text()')[0].strip() body = item.xpath('./listbody/text()')[0].strip() if item.xpath('./listbody/text()') else "无内容" print(f"{num} {body}")
这个方法输出和上面一致,但XPath语法能让你更灵活地定位XML节点,适合复杂结构的XML。
内容的提问来源于stack exchange,提问作者Ajeet Singh
相关产品推荐
相关产品推荐

