python中的Xml解析器,无需删除标记

python中的Xml解析器,无需删除标记,python,xml,parsing,text,Python,Xml,Parsing,Text,正在为我的项目处理XML解析器,但无法处理一个问题 这是我的XML文件。我对几个要素感兴趣:句子、句子确定性和ccue。 作为所需的输出,我希望得到: 确定性,确定的或不确定的 ccue,位于标签内,以及 整个句子(带CCUE-包括或排除) 我所做的: 将xml.etree.ElementTree作为ET导入 with open('myfile.xml', 'rt') as f: tree = ET.parse(f) for sentence in tree.iter('sentence')

正在为我的项目处理XML解析器,但无法处理一个问题

这是我的XML文件。我对几个要素感兴趣:句子、句子确定性和ccue。

作为所需的输出,我希望得到: 确定性,确定的或不确定的 ccue,位于标签内,以及 整个句子(带CCUE-包括或排除)

我所做的: 将xml.etree.ElementTree作为ET导入

with open('myfile.xml', 'rt') as f:
tree = ET.parse(f)

for sentence in tree.iter('sentence'):
    certainty = sentence.attrib.get('certainty')
    ccue = sentence.find('ccue')
    if certainty and (ccue is not None):
       print('  %s :: %s :: %s' % (certainty, sentence.text, ccue.text))
    else:
       print('  %s ::,:: %s' % (certainty,sentence.text))
但在这种情况下,CCUE从句子中删除,如果句子不确定,那么它就是不完整的。查找功能在找到ccue后立即停止。因此,如果句子是:

<sentence certainty="uncertain" id="S1867.3">However, the <ccue>majority of Israelis</ccue> find a comprehensive right of return for Palestinian refugees to be unacceptable.</sentence>
然而,大多数以色列人认为巴勒斯坦难民的全面返回权是不可接受的。 它将向我展示:“然而,这个”作为一句话

有谁能帮我解决这个问题吗?你也可以帮我把结果保存在CSV中——那太好了

更新 XML的示例:

<sentence certainty="certain" id="S1867.2">Left-wing Israelis are open to compromise on the issue, by means such as the monetary reparations and family reunification initiatives offered by Ehud Barak at the Camp David 2000 summit.</sentence>
<sentence certainty="uncertain" id="S1867.3">However, the <ccue>majority of Israelis</ccue> find a comprehensive right of return for Palestinian refugees to be unacceptable.</sentence>
<sentence certainty="certain" id="S1867.4">The HonestReporting organization listed the following grounds for this opposition: Palestinian flight from Israel was not compelled, but voluntary.</sentence>
<sentence certainty="uncertain" id="S1867.5">After seven Arab nations declared war on Israel in 1948, <ccue>many Arab leaders</ccue> encouraged Palestinians to flee, in order to make it easier to rout the Jewish state.</sentence>
<sentence certainty="certain" id="S1867.6">This point, however, is a matter of some contention.</sentence>
以色列左翼在这个问题上愿意妥协,比如埃胡德·巴拉克在2000年戴维营峰会上提出的金钱赔偿和家庭团聚倡议。
然而,大多数以色列人认为巴勒斯坦难民的全面返回权是不可接受的。
诚实报告组织列出了反对的理由如下:巴勒斯坦人逃离以色列不是被迫的,而是自愿的。
1948年七个阿拉伯国家向以色列宣战后,许多阿拉伯领导人鼓励巴勒斯坦人逃离,以便更容易击溃这个犹太国家。
然而,这一点是有争议的。

在XML中,文本可以分解为许多
text()
节点
ElementTree
调用查找所有子体文本节点,以便将它们粘合在一起。XML中关于如何处理文本节点周围的空白存在歧义(它是真实文本的一部分还是仅仅是“漂亮打印”的装饰)。您的示例中有
文本
(请注意其中有一个空格太多),因此我正在剥离它们并添加我自己的空格。您可以根据需要调整该零件

# let elementree open and figure out encoding
tree = ET.parse('myfile.xml')

for sentence in tree.iter('sentence'):
    certainty = sentence.attrib.get('certainty', '')
    ccue = sentence.find('ccue')
    if certainty == "uncertain" and ccue:
       text = ' '.join(node.strip() for node in sentence.itertext())
       print('  %s :: %s :: %s' % (certainty, text, ccue.text))
    else:
       print('  %s ::,:: %s' % (certainty,sentence.text))

在XML中,文本可以分为许多
text()
节点
ElementTree
调用查找所有子体文本节点,以便将它们粘合在一起。XML中关于如何处理文本节点周围的空白存在歧义(它是真实文本的一部分还是仅仅是“漂亮打印”的装饰)。您的示例中有
文本
(请注意其中有一个空格太多),因此我正在剥离它们并添加我自己的空格。您可以根据需要调整该零件

# let elementree open and figure out encoding
tree = ET.parse('myfile.xml')

for sentence in tree.iter('sentence'):
    certainty = sentence.attrib.get('certainty', '')
    ccue = sentence.find('ccue')
    if certainty == "uncertain" and ccue:
       text = ' '.join(node.strip() for node in sentence.itertext())
       print('  %s :: %s :: %s' % (certainty, text, ccue.text))
    else:
       print('  %s ::,:: %s' % (certainty,sentence.text))

请发布xml示例。。。不是同一张图片。@tdelaney在主消息中添加了您想要整个句子,包括ccue中的内容吗?这是
'.join(句子.itertext())
。顺便说一句-发布较短的文本(政治文本要少得多)会有帮助。@tdelaney是的,对不起。我没想过。谢谢你!我会试试你的解决办法我会写一个答案。你想让
if
if确定性==“不确定”和(ccue不是无):
?请发布xml示例。。。不是同一张图片。@tdelaney在主消息中添加了您想要整个句子,包括ccue中的内容吗?这是
'.join(句子.itertext())
。顺便说一句-发布较短的文本(政治文本要少得多)会有帮助。@tdelaney是的,对不起。我没想过。谢谢你!我会试试你的解决办法我会写一个答案。您是否希望该
if
读取
if确定性==“不确定”和(ccue不是无):