使用 etree 从文件中解析 xml 在读取字符串时有效,但在读取文件时则无效

2023-12-14

我对 Python 和 SO 来说是一个相对新手。我有一个 xml 文件,需要从中提取信息。我已经为此苦苦挣扎了好几天,但我想我终于找到了可以正确提取信息的东西。现在我在获得正确的输出时遇到了麻烦。这是我的代码:

from xml import etree
node = etree.fromstring('<dataObject><identifier>5e1882d882ec530069d6d29e28944396</identifier><description>This is a paragraph about a shark.</description></dataObject>')
identifier = node.findtext('identifier')
description = node.findtext('description')
print identifier, description

我得到的结果是“5e1882d882ec530069d6d29e28944396这是一段关于鲨鱼的段落。”,这就是我想要的。

然而,我真正需要的是能够从文件而不是字符串中读取。所以我尝试这段代码:

from xml import etree
node = etree.parse('test3.xml')
identifier = node.findtext('identifier')
description = node.findtext('description')
print identifier, description

现在我的结果是“无无”。我有一种感觉,要么文件输入不正确,要么输出有问题。这是test3.xml的内容

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response xmlns="http://www.eol.org/transfer/content/0.3" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dwc="http://rs.tdwg.org/dwc/dwcore/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:dwct="http://rs.tdwg.org/dwc/terms/" xsi:schemaLocation="http://www.eol.org/transfer/content/0.3 http://services.eol.org/schema/content_0_3.xsd">
  <identifier>5e1882d822ec530069d6d29e28944369</identifier>
  <description>This is a paragraph about a shark.</description>

您的 XML 文件使用默认命名空间。您需要使用正确的命名空间来限定您的搜索:

identifier = node.findtext('{http://www.eol.org/transfer/content/0.3}identifier')

让 ElementTree 匹配正确的元素。

您还可以给.find(), findall() and iterfind()方法是显式命名空间字典。这没有很好的记录:

namespaces = {'eol': 'http://www.eol.org/transfer/content/0.3'} # add more as needed

root.findall('eol:identifier', namespaces=namespaces)

前缀是only抬头望去namespaces您传入的参数。这意味着您可以使用任何您喜欢的命名空间前缀; API 分离了eol:部分,在中查找相应的命名空间 URLnamespaces字典,然后更改搜索以查找 XPath 表达式{http://www.eol.org/transfer/content/0.3}identifier反而。

如果您可以切换到lxml library事情变得更好了;该库支持相同的 ElementTree API,但会在.nsmap元素上的属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 etree 从文件中解析 xml 在读取字符串时有效,但在读取文件时则无效 的相关文章

随机推荐

  • Azure Graph API、Angular、获取用户组

    我想查询 Azure AD Graph API 以检索团体声称对于从注册的 Azure B2C 应用程序登录的用户 我调用的应用程序是 Angular 5 SPA 在尝试了 Azure Active Directory 和 adal ang
  • C 中返回值周围的括号

    在 ANSI C 代码中 我经常可以看到单个返回值周围有括号 像这样 int foo int x if x return 1 else return 0 在这些情况下为什么要在返回值周围使用 有任何想法吗 我看不出有什么理由 没有什么真正的
  • Cloud Firestore 中多租户的命名空间

    我们如何在 Firestore 中设置不同的数据库 命名空间 这将有助于构建多租户 SaaS 产品 这是正在考虑的事情 但还没有确定的计划 当前的方法需要您创建单独的项目 集合名称方案可能是可行的 但您将遇到项目的复合索引限制
  • 为什么Python对可以嵌套的静态块的数量有限制?

    Python 中静态嵌套块的数量限制为 20 个 即嵌套19for循环就可以了 虽然非常耗时 O n 19 太疯狂了 但嵌套 20 会失败 并显示 SyntaxError too many statically nested blocks
  • MVC 2 接口上的 UpdateModel,是否应该忽略 ModelBinderAttribute?

    我有从特定抽象类的实例发布数据的表单 public abstract class IRestriction public string Name get set public abstract IModelBinder GetBinder
  • 如何将模型或字符串传递给 angularjs 中的指令?

    我正在研究一个指令 其中参数之一可以是模型 动态值 有时也可以是字符串 我能做到这一点的唯一方法是使用 有一个更好的方法吗
  • 搜索 HTML 表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我已经用 HTML 创建了
  • 之前触发 onchange 时未触发 onclick 事件

    我这里有一个有趣的问题 我有一个文本区域 其中链接了一个 onchange 事件 然后我有一个链接到 onclick 事件的按钮 当在文本区域上触发 onchange 事件时 将处理放入文本区域的文本 当我单击文本区域之外的内容时 通常会发
  • 使用 pyodbc 和 mysql8 的参数化查询对于 int 数据类型的列返回 0

    蟒蛇 2 7 12 pyodbc 4 0 24 操作系统 Ubuntu 16 4 数据库 MySQL 8 驱动程序 MySQL 8 预期行为 结果集应在数据类型为 int 的列中包含数字 实际行为 所有 int 数据类型的列都有 0 如果使
  • 带有 ListBox 的 WPF ListBox - UI 虚拟化和滚动

    我的原型显示包含 页面 的 文档 由缩略图表示 每个文档可以有 任意数量的页面 例如 可能有 1000 个文档 每个文档 5 页 或 5 个文档 每个文档 1000 页 每个 或介于两者之间 文档不包含其他文档 在我的 xaml 标记中我有
  • 当我的整个应用程序锁定在纵向模式时,以横向模式全屏播放视频

    我想以全屏横向模式播放视频 我的应用程序锁定在纵向模式 如何实现这一点 请帮我 提前致谢 swift 3 中最简单的解决方案 将其添加到您的应用程序委托中 func application application UIApplication
  • 在 Firebase 中获取子项计数

    请问我如何简单地从 firebase 查询中获取子项计数 例如 假设我使用包含 10 个子项的数据库查询 我如何获取该值 因为我尝试使用onChildChanged 事件并从中获取价值snapshot 但效果并不好 这是因为首先它会获取数字
  • 无法连接到服务器 - 与网络相关或特定于实例的错误

    尝试连接到 SQL Server 时出现以下错误 建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误 服务器未找到或无法访问 验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接 提供程序 命名管道提供
  • 将派生类指针数组转换为基类指针数组

    考虑这样的继承层次结构 A B1 B2 C D 在C 中实现如下 class A public A virtual A 0 double a A A class B1 virtual public A public B1 virtual B
  • 如何计算 numpy 数组沿轴的平均值? [复制]

    这个问题在这里已经有答案了 我是Python新手 这是我的三维数组 my data numpy zeros index1 index2 index3 为了便于说明 假设尺寸为 index1 5 index2 4 index3 100 我想计
  • 使用 SNI 选项以编程方式在 IIS 8 上添加绑定

    我正在尝试使用 Microsoft Web Administration 库 NET Framework 创建 IIS 8 的绑定 该绑定已检查标志 SNI 服务器名称指示 这对我来说是必要的 因为我想在 IIS 下为同一个网站获取多个 S
  • Swing、Java 和多线程以及着色按钮

    是的 这是家庭作业 是的 我完全被困住了 这是要点 我创建了一个 JFrame 有 3 个面板 顶部 中间 底部 底部面板中有 3 个按钮 红色 绿色和蓝色 顶部面板中有 3 个文本字段 用于显示单击相应按钮的次数 每个按钮最多允许 10
  • 使用平衡组的正则表达式

    我有一个基本的文本模板引擎 它使用如下语法 foo bar IF MY VAR some text IF OTHER VAR some other text ENDIF ENDIF bar foo 我对用于解析它的正则表达式有一个问题 它没
  • Javascript:比较运算符中操作数的顺序[重复]

    这个问题在这里已经有答案了 我看到很多人写作有什么具体原因吗 if 1 a 代替 if a 1 我已经给出了一个答案 其中我写了类似的内容Array obj constructor当有人问我他经常看到人们这样写而不是这样写obj const
  • 使用 etree 从文件中解析 xml 在读取字符串时有效,但在读取文件时则无效

    我对 Python 和 SO 来说是一个相对新手 我有一个 xml 文件 需要从中提取信息 我已经为此苦苦挣扎了好几天 但我想我终于找到了可以正确提取信息的东西 现在我在获得正确的输出时遇到了麻烦 这是我的代码 from xml impor