鱼C论坛

 找回密码
 立即注册
查看: 1624|回复: 2

[已解决]使用minidom来解析xml, 无法得到属性, 元素的xml也只显示结束标签?

[复制链接]
发表于 2022-6-23 18:02:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我有一段非常简单的xml, 想尝试获得元素的属性值.

testing.xml代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<catalog>
   <aa value="first">this is the 1st.</aa>
   <aa value="second">this is the 2nd.</aa>
</catalog>

用来解析的python代码如下, 我在其中做了结果标记:
from xml.dom import minidom


with minidom.parse('c:/desktop/testing.xml') as dom:
    elements = dom.getElementsByTagName('aa')        

print(f'There are {len(elements)} items')                    # 这个能正确的获得元素的数量

print(elements[1])                                                   # 这个能打印类似这样的元素内存值: <DOM Element: aa at 0x2c864d264c0>
print(elements[1].nodeType)                                     # 这个结果是1, 应该是element node
print(elements[1].toprettyxml(encoding='utf-8'))         # 这个结果是b'<aa/>\n', 按理说是应该显示<aa value="second">this is the 2nd.</aa>
print(elements[1].attributes['value'].value)                 # 这个提示是 error, KeyError 'value', 照理说应该是显示 second?


我也查找了相关指引, 比如: https://stackoverflow.com/a/1912516/3127293, 我几乎是原样按照这里介绍的方式做的, 但是在我这里就是错误的.

我的环境是 windows + python3.9.10 + VScode

不知我的代码哪里出错了? 如何才能获得xml元素的某个属性的值呢?

最佳答案
2022-6-24 16:35:26
你的with后elements会被释放,请把打印都加个缩进就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-24 16:35:26 | 显示全部楼层    本楼为最佳答案   
你的with后elements会被释放,请把打印都加个缩进就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-25 02:16:10 | 显示全部楼层
塔利班 发表于 2022-6-24 16:35
你的with后elements会被释放,请把打印都加个缩进就好了

确实如此. 感谢你的答案.

只是我有些不理解为什么会这样?

1, 用with open(file)的时候, 在其中变量赋值, 在with外也是可以读取的. 为什么换成with minidom.parse()就被释放了?

2, 即便释放了, 但是上面例子中, 在with释放后的len(elements)却得到了正确的数值.

3, 同2的疑问, with释放后的elements[1].toprettyxml()虽然不能打印出正确的值, 但是也能打印一个结尾tag, 如果要被释放了, 不是应该是none, 或者是空值吗?

有些困扰, 望高手赐教.

答案我采纳了. 非常感谢.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 19:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表