如何解析具有子内容但没有子标签的完整 xml div

Posted

技术标签:

【中文标题】如何解析具有子内容但没有子标签的完整 xml div【英文标题】:How to parse full xml divs with child content but without child tags 【发布时间】:2022-01-13 11:42:04 【问题描述】:

我有包含标记文本的大段的 xml 文件。 我需要解析去除子标签或替换的内容以创建 html 链接。

这是sample.xml的内容:

<BODY><ENTRY id="AB">Blabla</ENTRY>
<ENTRY id="XY"> This is the city of <LOC ref="at0001">Vienna</LOC>, which until <YEAR>1918</YEAR> blablabla</ENTRY></BODY>

这是我的代码:

import xml.etree.ElementTree as ET

parsedxml=ET.parse('sample.xml')        
xmlroot = parsedxml.getroot()
section=xmlroot.find(".//*[@id='XY']").text

返回:“这就是城市”

我需要的是要么

“这是维也纳市,直到 1918 年 blablabla,很多类似的标签。”。

或者,理想情况下:

“这是维也纳的城市,直到1918年blablabla,很多类似的标签。”

【问题讨论】:

你能提供一个最小的、可重现的例子吗?见:***.com/help/minimal-reproducible-example ETfilename 是什么? 相应地编辑了代码。也会做最小的可重复示例 如果你可以使用lxml而不是elementtree的话应该很容易做到。 【参考方案1】:

在上面的示例中,获取文本“这是维也纳市,直到 1918 年 blablabla”的一种方法是使用 xmltodictjson。见下文:

import xmltodict
import json
xml = """
<BODY><ENTRY id="AB">Blabla</ENTRY>
<ENTRY id="XY"> This is the city of <LOC ref="at0001">Vienna</LOC>, which until <YEAR>1918</YEAR> blablabla</ENTRY></BODY>
"""
data_dict = xmltodict.parse(xml)
json_string = json.dumps(data_dict)
xml_json = json.loads(json_string)
text_i_want = xml_json['BODY']['ENTRY'][1]['#text']
print("text_i_want:", text_i_want)

【讨论】:

以上是关于如何解析具有子内容但没有子标签的完整 xml div的主要内容,如果未能解决你的问题,请参考以下文章

如何在解析之前检查 XML 中是不是存在属性和标签?

使用 SAX 解析器,如何解析具有相同名称标签但元素不同的 xml 文件?

XStream xml 解析框架使用笔记

Uuit12:XML语法XML解析

如何解析 XML 文件并使用找到的值创建对象?

使用 JAXB 获取 XML 子节点的值