Python lxml:查询nodes()时返回不带.text属性的项

2024-09-28 21:45:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个XML文档中解析出某些标记,但它正在注销一个AttributeError: '_ElementStringResult' object has no attribute 'text'错误。在

以下是xml文档:

<?xml version='1.0' encoding='ASCII'?>
<Root>
  <Data>
    <FormType>Log</FormType>
    <Submitted>2012-03-19 07:34:07</Submitted>
    <ID>1234</ID>
    <LAST>SJTK4</LAST>
    <Latitude>36.7027777778</Latitude>
    <Longitude>-108.046111111</Longitude>
    <Speed>0.0</Speed>
  </Data>
</Root>

这是我使用的代码

^{pr2}$

Tags: 文档标记iddatarootxmllastattributeerror
2条回答

'//Root/Data/node()'将返回所有子元素的列表,这些子元素以字符串的形式包含文本元素,这些元素不具有text属性。如果你在Data = ...后面加上一个印刷体,你会看到类似['\n ', <Element FormType at 0x10675fdc0>, '\n ', ...的东西。在

我会先做一个过滤器,比如:

Data = [f for f in elem.xpath('//Root/Data/node()') if hasattr(f, 'text')]

那么我想下面这一行可以改写为:

^{pr2}$

这将给元素标签和文本字典,我相信这是你想要的。在

如果您只想返回元素(与文本节点相反),那么查询/Root/Data/*,而不是查询//Root/Data/node()。(另外,只使用一个前导/而不是//可以让引擎进行更便宜的搜索,而不需要在整个子树中寻找额外的Root。在

另外,你确定你真的想在你的内部循环中循环整个数据子元素列表,而不是只循环外部循环选择的单个数据元素的子元素吗?我认为您的逻辑已经被破坏了,尽管只有在Root下有一个以上的Data元素的文件才是可见的。在

相关问题 更多 >