如果父元素具有某些信息,我想选择非常大的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="yes" 的所有孩子
我了解,最简单的方法是构建 xpath 并将其放入 try ->if/except 块中:
xpath = '(//sn[@elliptic="yes"])[1]'
现在创建一个 if 语句,该语句将检查此元素是否在您的 xml 组中,如果它存在,则执行所需的操作。例如,如果这是真的,那么使用另一个 xpath 的 or etc 来提取所需的内容。
附言这个[1]
意味着您正在XML中搜索第一个元素,如果有多个1,那么没有它,它可能会中断。因此,创建迭代器i
,这些迭代器将进入您的 xpath (//sn[@elliptic="yes"])[i]