Python:xml ElementTree(或 lxml)中的命名空间

2023-11-25

我想检索旧版 xml 文件、操作并保存它。

这是我的代码:

from xml.etree import cElementTree as ET
NS = "{http://www.somedomain.com/XI/Traffic/10}"

def fix_xml(filename):
    f = ET.parse(filename)
    root = f.getroot()
    eventlist = root.findall("%(ns)Event" % {'ns':NS })
    xpath = "%(ns)sEventDetail/%(ns)sEventDescription" % {'ns':NS }
    for event in eventlist:
        desc = event.find(xpath)
        desc.text = desc.text.upper() # do some editting to the text.

    ET.ElementTree(root, nsmap=NS).write("out.xml", encoding="utf-8")


shorten_xml("test.xml")

我加载的文件包含:

xmlns="http://www.somedomain.com/XI/Traffic/10"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.somedomain.com/XI/Traffic/10 10.xds"

在根标签处。

我有以下与命名空间相关的问题:

  • 如您所见,对于每个标记调用,我在开头给出了命名空间以检索子项。
  • 生成的xml文件没有<?xml version="1.0" encoding="utf-8"?>一开始。
  • 输出的标签包含这样的<ns0:eventDescription>虽然我需要输出作为原始的<eventDescription>,开头没有命名空间。

这些如何解决呢?


看看有关命名空间的 lxml 教程部分。还有这个关于 ElementTree 中的命名空间的文章.

问题一:像其他人一样忍受它。代替"%(ns)Event" % {'ns':NS } try NS+"Event".

问题2:默认情况下,仅在需要时才写入XML 声明。您可以通过使用强制它(仅lxml)xml_declaration=True在你的write() call.

问题3:nsmaparg 似乎仅限于 lxml。 AFAICT 它需要一个映射,而不是一个字符串。尝试nsmap={None: NS}。 effbot 文章中有一节描述了此问题的解决方法。

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

Python:xml ElementTree(或 lxml)中的命名空间 的相关文章

随机推荐

  • 如何在NotificationCompat.Builder.setLargeIcon()中加载Glide缓存图像?

    喜欢这张图片我正在尝试将通知大图标设置为用户个人资料缩略图 像 Whatsapp 或其他聊天应用程序 我努力了 Glide with context asBitmap load messageNotification getLargeIco
  • Swift 视频调整器 AVAsset

    我有这段代码可以将视频大小从 1280 x 720 调整为 640 x 360 但我想要调整大小而不裁剪 有没有办法完全调整大小而不裁剪 这是代码 class func resizer inputURL NSURL completion o
  • babel-preset-env 不使用 webpack 转译箭头函数

    我正在将 babel 与 webpack 一起使用 我试图使箭头函数与 Internet Explorer 一起使用 但我无法让它工作 这是我的包 json开发依赖 devDependencies babel core 6 26 3 bab
  • Android - 如何管理具有不同内容的单个片段的多个实例?

    我希望能够设置各个片段的视图的 setText 和 getText 就像现在一样 当我设置 Framgent 的 TextView 的文本时 它会更改所有片段中该视图的文本 我一直在尝试移动东西 但这是我目前的代码 片段类 public c
  • Python WX - 从 wx 对话框返回用户输入

    我是 Python 和 WX 的新手 我创建了一个简单的测试对话框 如下所示 用组合框提示用户 我想从主程序中的组合框中捕获值 我如何从我的主程序中调用它 这就是我打算如何调用它来显示对话框 但当前不捕获组合框中的值 import high
  • ArgumentParser:具有可选值的可选参数

    如果我有一个带有可选参数值的可选参数 有没有办法在未给出值时验证该参数是否已设置 例如 parser argparse ArgumentParser parser add argument abc nargs args parser par
  • OpenERP 始终显示继承视图而不是原始视图

    原始观点
  • SQL Server - 由于“ARITHABORT”而导致 INSERT 失败

    我使用 NHibernate 和 SQL Server 2005 并且在我的一张表的计算列上有一个索引 我的问题是 当我向该表插入一条记录时 出现以下错误 INSERT 失败 因为以下 SET 选项设置不正确 ARITHABORT I us
  • 从数据框中删除仅包含 0 或仅包含单个 0 的行

    我正在尝试在 R 中创建一个函数 该函数允许我根据行是否包含带有零的单列来过滤数据集 此外 有时我只想删除所有列中为零的行 另外 这就是有趣的地方 并非所有列都包含数字 并且列数可能会有所不同 我尝试将一些数据与我想要获得的结果粘贴到此处
  • 如何编写程序来查找某些单词是否相似?

    即 学院 和 学业 和 学院 属于同一集群 essay scholarships money 这些词也属于同一簇 这是 ML 或 NLP 问题吗 这取决于你的定义有多严格similar is 机器学习技术 As others已经指出 你可以
  • 如何在 laravel dompdf 中为每页添加页码?

    我从这里得到 https github com barryvdh laravel dompdf 我的控制器是这样的 public function listdata pdf PDF loadView print tests test pdf
  • 如何正确关闭数据源连接?

    我有这个类 但我不确定如何正确关闭连接 因为即使我只有 3 个用户登录但有多个 sql 查询 我仍然遇到此错误 gt com mysql jdbc exceptions jdbc4 MySQLNonTransientConnectionEx
  • 更改 CMAKE_CXX_FLAGS_DEBUG 和 CMake 中朋友的默认值

    我想更改默认值CMAKE CXX FLAGS RELEASE or CMAKE CXX FLAGS DEBUG在 CMake 中 基本上 我有一些项目默认值与 CMake 的默认值略有不同 例如 对于发布 我不应该问自己 哦 当使用 add
  • 迭代 Objective-C 对象的子对象时,镜像在 Swift 中不起作用

    我有一个与在 Swift 中使用 Mirror 相关的非常奇怪的问题 我正在迭代名为 Test 的类中的所有属性 let test Test let mirror Mirror reflecting test for i in mirror
  • 如何使枚举类与“位或”功能一起使用?

    我通常使用enum与 位或 或 在一起可以让一个对象拥有一些选项 如何使枚举类与 位或 功能一起使用 您需要重载枚举类的运算符 并通过转换为基础类型来实现它们 enum class foo unsigned bar 1 baz 2 foo
  • Symfony 安全性返回 401 响应而不是重定向

    我正在编写一个带有ajax身份验证的ajax应用程序 现在我开始使用silex中的symfony安全组件来处理身份验证 授权 使用简单的配置进行简单的测试 我进入防火墙的受保护区域 得到的响应是重定向到 login页面 但我在应用程序中需要
  • 阻止 UIPopover 自动关闭

    我想知道是否有办法阻止 iPad 弹出框在您触摸弹出框外的屏幕时自动关闭 如果没有 是否有某种类似于 popoverDidDismiss 的方法 我可以调用它来告诉弹出窗口何时被关闭 是的你可以 这是苹果文档中的内容 当由于用户在弹出窗口视
  • 在球体上翻转 Three.js 中的法线

    我一直在四处寻找 但还没有找到任何真正好的答案来回答我的问题 问题是我有这个球体 只是一个基本球体 我想翻转法线 所以 球体获得某种 空心 雕刻效果 然后将我的纹理应用到球体的 内部 关于如何翻转法线有什么想法吗 另外 如果不可能在 Thr
  • Pandas,在字符串中打印变量

    我有一个数据框 新 看起来像这样 num name1 name2 11 A AB 14 Y YX 25 L LS 39 Z ZT 我只想提取打印语句中的数值 这样我就有一个如下所示的输出 The value is 11 The value
  • Python:xml ElementTree(或 lxml)中的命名空间

    我想检索旧版 xml 文件 操作并保存它 这是我的代码 from xml etree import cElementTree as ET NS http www somedomain com XI Traffic 10 def fix xm