在Python中获取XML属性?

时间:2016-01-01 12:03:06

标签: python xml python-2.7 python-3.x

例如,我有以下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)

2 个答案:

答案 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