其思想是为以下xml
获取标记endTime
的值:
<epochs xmlns="http://www.egi.com/epochs_mff" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<epoch>
<beginTime>0</beginTime>
<endTime>3586221000</endTime>
<firstBlock>1</firstBlock>
<lastBlock>897</lastBlock>
</epoch>
<epoch>
<beginTime>3750143000</beginTime>
<endTime>5549485000</endTime>
<firstBlock>898</firstBlock>
<lastBlock>1347</lastBlock>
</epoch>
</epochs>
但是,访问标记直接返回一个空列表:
import xml.etree.ElementTree as ET
tree = ET.parse(r'epochs.xml')
epoch_list=tree.findall("epoch")
但是,通过tree
循环确实会返回endTime
值
import xml.etree.ElementTree as ET
tree = ET.parse(r'epochs.xml')
for elem in tree:
for subelem in elem:
print(subelem.text)
我可以知道如何直接检索值为300937000的endTime
吗
代码失败的原因是XML使用默认名称空间 (xmlns=”http://...“)
但是对findall的调用包含epoch而没有任何名称空间,因此它不是 可能会找到任何东西
要处理名称空间的XML,您必须:
比如:
结果是:
如果你不在乎的话,还可以获取你的endTime元素的内容 XML树中的任何中间元素,请运行:
另一种选择是传递完整的XML路径,从 根元素,但请记住每个步骤的名称空间前缀:
如果您有多个endTime元素,则可能的解决方案之一 就是在循环中处理它们
这次findtext没有用,因为它只找到第一个匹配元素。 您应该使用基于findall的循环,然后(在循环内) 检索当前元素的文本并使用它, e、 g:
当然,用您需要的任何东西替换打印 找到文本
相关问题 更多 >
编程相关推荐