我正在尝试查找属性class
为'TRX'并且其属性distName
以'PLMN-PLMN / BSC-208812 / BCF-1 / BTS-1'开头的所有子元素
这样的事情可能吗?
root[0].findall("*[@class='TRX'][@distName='PLMN-PLMN/BSC-208812/BCF-1/BTS-1*']")
我在lxml上使用cElementTree,因为它在我的comp上要快得多。
答案 0 :(得分:2)
ElementTree实际上可以做到这一点。
您可能需要使用.//*
代替*
。
Python docs ElementTree版本1.3.0具有您所寻求的XPath功能。
示例强>
from xml.etree import ElementTree
et = ElementTree.fromstring("""
<r>
<b>
<a class='c' foo='e'>this is e</a>
<a class='c' foo='f'>this is f</a>
<a class='c' foo='g'>this is g</a>
</b>
</r>
""")
if __name__ == '__main__':
print ElementTree.VERSION
print "* c and f", et.findall("*[@class='c'][@foo='f']")
print ".//* c and f", et.findall(".//*[@class='c'][@foo='f']")
print ".//* c", et.findall(".//*[@class='c']")
print ".//* f", et.findall(".//*[@foo='f']")
<强>输出强>
1.3.0
* c and f []
.//* c and f [<Element 'a' at 0x10049be50>]
.//* c [<Element 'a' at 0x10049bdd0>, <Element 'a' at 0x10049be50>, <Element 'a' at 0x10049bf10>]
.//* f [<Element 'a' at 0x10049be50>]