繁体   English   中英

如何为自闭合标签之间的文本解析.trs XML 文件?

[英]How to parse .trs XML file for text between self-closing tags?

我有这样的文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Trans SYSTEM "trans-14.dtd">
<Trans scribe="MSPLAB" audio_filename="Combine001" version="5" version_date="110525">
<Episode>
<Section type="report" startTime="0" endTime="2613.577">
<Turn startTime="0" endTime="308.0620625">
<Sync time="0"/>

<Event desc="music" type="noise" extent="instantaneous"/>

<Sync time="2.746"/>
TARGET_TEXT1
<Sync time="5.982"/>
TARGET_TEXT2

</Turn>
</Section>
</Episode>
</Trans>

这是否被认为是格式良好的 xml 文件? 我正在尝试在 Python 中提取TARGET_TEXT1TARGET_TEXT2 ,但我不明白这些内容属于自闭标签之间的位置。 我在这里看到了另一个帖子,但它是在 Java 中完成的。

使用ElementTree中的itertext

import xml.etree.ElementTree as ET

tree = ET.parse('test.xml')
root = tree.getroot()

data = [text.strip() for node in root.findall('.//Turn') for text in node.itertext() if text.strip()]
print(data)

Output:

['TARGET_TEXT1', 'TARGET_TEXT2']

更新:如果你想要字典为 output 试试这个:

data = {float(x.attrib['time']): x.tail.strip() for node in root.findall('.//Turn') for x in node if x.tail.strip()}
#{2.746: 'TARGET_TEXT1', 5.982: 'TARGET_TEXT2'}

另一种方法是通过 parsel 使用xpath

从解析导入选择器

#xml is wrapped into a variable called data
selector = Selector(text=data, type="xml")
selector.xpath(".//Turn/text()").re("\w+")
['TARGET_TEXT1', 'TARGET_TEXT2']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM