Python如何创建带命名空间前缀的XML元素

星降
发布: 2025-12-19 15:03:35
原创
252人浏览过
在Python中创建带命名空间前缀的XML元素需先调用ET.register_namespace('ns', 'https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38')注册前缀,再用'{URI}local_name'格式构造元素标签,ElementTree会自动添加xmlns:ns声明并输出ns:前缀。

python如何创建带命名空间前缀的xml元素

在Python中创建带命名空间前缀的XML元素,核心是使用 xml.etree.ElementTree标准库)并正确设置 xmlns:prefix 属性和元素的 QName(带前缀的标签名)。关键在于:命名空间声明必须出现在父元素上,且元素标签需用 {namespace_uri}local_name 格式构造,再通过 register_namespace() 绑定前缀,才能让 tostring() 输出带前缀的形式。

正确注册命名空间并设置前缀

ElementTree 默认不保留你“写死”的前缀(如 ns:tag),它按内部命名空间映射生成前缀。必须调用 ET.register_namespace(prefix, uri) 提前注册,否则输出可能用 ns0ns1 等自动生成的前缀。

  • 在构建任何元素前,先调用 ET.register_namespace('ns', 'https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38')
  • 注册后,所有同 URI 的元素都会优先使用该前缀(如 ns:book
  • 同一 URI 只需注册一次,全局生效

构造带命名空间的元素标签

元素的 tag 参数必须是完整限定名:即 {URI}local_name 字符串。不能直接写 'ns:book',否则会被当作普通无命名空间标签处理。

  • 正确写法:ET.Element('{https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38}book')
  • 推荐用变量避免重复:NS = {'ns': 'https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38'}; book = ET.Element(f'{{{NS["ns"]}}}book')
  • 子元素同样需用完整 URI 构造,例如 title = ET.SubElement(book, f'{{{NS["ns"]}}}title')

在根元素声明 xmlns:prefix 属性

命名空间声明(xmlns:ns="...")会自动添加到最靠近且包含该命名空间的第一个祖先元素上。通常放在根节点即可覆盖全部子元素。

立即学习Python免费学习笔记(深入)”;

Copysmith
Copysmith

Copysmith是一款面向企业的 AI 内容创建解决方案

Copysmith 168
查看详情 Copysmith
  • 无需手动设置 root.set('xmlns:ns', '...') —— ElementTree 会自动完成
  • 但前提是:该命名空间已通过 register_namespace() 注册,且至少有一个元素使用了对应 URI
  • 如果只注册没使用,或 URI 拼写不一致(如末尾多斜杠),声明不会出现

完整可运行示例

以下代码生成 <library xmlns:ns="https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38"><book><title>Python Guide</title></book></library>

import xml.etree.ElementTree as ET
<h1>1. 注册命名空间前缀</h1><p>ET.register_namespace('ns', '<a href="https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38">https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38</a>')</p><h1>2. 构造根元素(使用完整 URI)</h1><p>root = ET.Element('{<a href="https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38}library">https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38}library</a>')</p><h1>3. 添加子元素(同样用完整 URI)</h1><p>book = ET.SubElement(root, '{<a href="https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38}book">https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38}book</a>')
title = ET.SubElement(book, '{<a href="https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38}title">https://www.php.cn/link/aedd87de3760230b3c1e74e37b875a38}title</a>')
title.text = 'Python Guide'</p><h1>4. 生成字符串(自动带 ns: 前缀和 xmlns 声明)</h1><p>print(ET.tostring(root, encoding='unicode'))
登录后复制

以上就是Python如何创建带命名空间前缀的XML元素的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号