2024-05-16 20:38:57 发布
网友
我有类似于this的XML,我想获得tag=035和code=a的行的值,对于tag=035和code=9是“BAI”的节点 我试着找出BAI出现的节点,然后询问它的父节点
[ _sub.getparent() for _sub in _xml.findall(".//*[@tag='035']/*[@code='9']") if(_sub.text=='BAI') ]
但是父级是空的。。。如何在035,9='BAI'节点获取035,a?你知道吗
您可以在纯XPath中这样做:
//*[@tag='035']/*[@code='9'][. = 'BAI']/following-sibling::*[@code='a']
这个公式假定,任何验证和/或发布数据的东西都将强制执行任何[@code='a']作为之后的[@code='9']
[@code='a']
[@code='9']
您还可以(也许在理想情况下)这样编写xpath:
//*[@tag='035']/*[@code='9'][. = 'BAI']/../*[@code='a']
或者像这样:
//*[@tag='035'][subfield[@code='9' and . = 'BAI']]/subfield[@code='a']
或者更一般地说:
//*[@tag='035'][child::*[@code='9' and . = 'BAI']]/child::*[@code='a']
这个公式没有假定任何秩序。你知道吗
XPath是一种非常强大的语言,尤其是XPath3.0,是一种完整的图灵完备语言,这使得它更加强大和令人敬畏。你知道吗
就lxml而言,它不需要所有这些配方。但幸运的是,最短最甜的被接受了,所以:
from lxml import etree tree = etree.parse("data/search.xml") print(tree.findall("//*[@tag='035']/*[@code='9'][. = 'BAI']/../*[@code='a']"))
希望这有帮助!你知道吗
您可以在纯XPath中这样做:
这个公式假定,任何验证和/或发布数据的东西都将强制执行任何
[@code='a']
作为之后的[@code='9']
您还可以(也许在理想情况下)这样编写xpath:
或者像这样:
或者更一般地说:
这个公式没有假定任何秩序。你知道吗
XPath是一种非常强大的语言,尤其是XPath3.0,是一种完整的图灵完备语言,这使得它更加强大和令人敬畏。你知道吗
就lxml而言,它不需要所有这些配方。但幸运的是,最短最甜的被接受了,所以:
希望这有帮助!你知道吗
相关问题 更多 >
编程相关推荐