如果父元素具有某些信息,我想在非常大的xml文件中选择所有子元素的信息。如果在示例代码中,节点sn的属性包含 elliptic =“yes”,则选择 v 节点并检索属性值(例如wd =“vulgui”) “)。
<sentence>
<sadv arg="argM" func="cc" tem="tmp">
<sadv>
<grup.adv>
<r lem="després" pos="rg" wd="Després"/>
<sp>
<prep>
<s lem="de" pos="sps00" postype="preposition" wd="de"/>
</prep>
<sn entityref="nne">
<spec gen="m" num="p">
<z lem="15" ne="number" wd="15"/>
</spec>
<grup.nom gen="m" num="p">
<n gen="m" lem="any" num="p" pos="ncmp000" postype="common" sense="16:10917509" wd="anys"/>
<sp>
<prep>
<s lem="de" pos="sps00" postype="preposition" wd="de"/>
</prep>
<sn entityref="nne">
<spec gen="f" num="s">
<d coreftype="ident" entity="entity3" entityref="nne" gen="f" lem="el_seu" num="s" person="3" pos="dp3fs0" postype="possessive" wd="la_seva"/>
</spec>
<grup.nom gen="f" num="s">
<n gen="f" lem="creació" num="s" pos="ncfs000" postype="common" sense="16:00583085" wd="creació"/>
</grup.nom>
</sn>
</sp>
</grup.nom>
</sn>
</sp>
</grup.adv>
</sadv>
<f lem="," pos="fc" punct="comma" wd=","/>
</sadv>
<sn arg="arg0" coreftype="ident" **elliptic="yes"** entity="entity3" entityref="nne" func="suj" tem="agt"/>
<grup.verb>
<v lem="presentar" lss="A32.ditransitive-patient-benefactive" mood="indicative" num="p" person="3" pos="vmip3p0" postype="main" tense="present" **wd="presenten"**/>
</grup.verb>
<sn arg="arg1" entityref="spec" func="cd" tem="pat">
<spec gen="m" num="s">
<d gen="m" lem="un" num="s" pos="di0ms0" postype="indefinite" wd="un"/>
</spec>
<grup.nom gen="m" num="s">
<s.a gen="m" num="s">
<grup.a gen="m" num="s">
<a gen="m" lem="nou" num="s" pos="aq0ms0" postype="qualificative" wd="nou"/>
</grup.a>
</s.a>
<n gen="m" lem="disc" num="s" pos="ncms000" postype="common" sense="16:03112307" wd="disc"/>
<sn entityref="ne" ne="other">
<f lem="," pos="fc" punct="comma" wd=","/>
<grup.nom>
<f lem="'" pos="fz" punct="mathsign" wd="'"/>
<n lem="Electroretard" ne="other" pos="np0000a" postype="proper" sense="16:cs1" wd="Electroretard"/>
<f lem="'" pos="fz" punct="mathsign" wd="'"/>
</grup.nom>
</sn>
</grup.nom>
</sn>
<f lem="." pos="fp" punct="period" wd="."/>
我在以下之后无法提出解决方案:
for sn in root.iter('sn'):
rank = sn.get('elliptic')
if rank == 'yes':
我怎么能继续这行代码?我想的是:
“遍历所有父母包含@ elliptic =”是“
的孩子答案 0 :(得分:1)
据我所知,最简单的方法是构建xpath并将其放入try - &gt; if / except block:
xpath = '(//sn[@elliptic="yes"])[1]'
现在创建一个if语句来检查这个元素是否在你的xml组中,如果它存在,那就做你需要的。 例如。如果这是真的,那么使用另一个xpath或等来提取所需的内容。
P.S。这个[1]
意味着你在xml中搜索第一个元素,如果有多个,那么没有它,它就会破坏。因此,创建将在xpath i
(//sn[@elliptic="yes"])[i]