例如,我有以下XML文件:
在每个短语中,我总是有2个<en>
标记,x
属性是PERS,LOC或ORG。
我想要做的是获得所有<en>
对,它们是ORG&amp;仅限PERS
XML示例:
<PHRASE>
<N y='0'> back</N>
<en x='PERS'>John</en>
<PREP>to</PREP>
<en x='LOC'>New York</en>
</PHRASE>
我正在使用元素树,我试过了,但无论第二个“en”标签是什么,它都会检索任何PERS或ORG。我只想要PERS和ORG对(即:当它们出现在同一个短语中时)
for en in root.findall('./PHRASE/en'):
NE = en.get('x')
if(NE) == "ORG":
print("ORG is: ",en.text)
NE2=en.get('x')
if(NE2) == "PERS":
print("PER is:", en.text)
答案 0 :(得分:2)
如果你想找到特殊的短语,你必须迭代短语并测试它们以满足条件:
for phrase in root.findall('./PHRASE'):
ens = {en.get('x'): en.text for en in phrase.findall('en')}
if 'ORG' in ens and 'PERS' in ens:
print("ORG is: {}, PERS is: {}".format(ens["ORG"], ens["PERS"]))
答案 1 :(得分:0)
您不必迭代所有短语。使用XPath
的强大功能过滤掉PHRASE
&#39; sx属性为en
的第PERS
个元素,以及第二个en
&#39} sx属性为LOC
:
root.xpath(".//PHRASE[en[1]/@x = 'PERS' and en[2]/@x = 'LOC']")
假设您使用的是lxml.etree
。