为什么这个 Python 代码没有正确分配 DOM 变量?

Why isn't this Python code properly assigning the DOM variable?

提问人:lrhorer 提问时间:8/24/2023 最后编辑:lrhorer 更新时间:8/24/2023 访问量:41

问:

我对 Python 相当陌生,对 Python 中的 XML 操作完全陌生。下面是其中一个 XML 文件的代码片段:

<!--created on 2023-08-21 06:58:42 - tinyMediaManager 4.3.13-->
<movie>
  <title>El Dorado</title>
  <originaltitle>El Dorado</originaltitle>
  <sorttitle/>
  ...
</movie>

我需要将值分配给变量。程序分配 null 字符串而不是“El Dorado”。代码如下:

import xml.dom.minidom
import glob
Directory = "/RAID/Server-Main/KODI/VideoDB/"

for InFile in glob.glob(Directory + "*.xnfo"):
    print(InFile)
    domtree = xml.dom.minidom.parse(InFile)
    group = domtree.documentElement
    Main = group.getElementsByTagName('movie')
    for name in Main:
        Title = name.getAttribute('title')
        print(Title)

我没有收到任何错误,我知道它正确扫描了所有文件,但输出为空。

编辑:我做了一点戳,由于某种原因,程序从未进入for循环,这意味着Main没有元素。我完全不明白这一点。

python xml 解析

评论

0赞 Alexei Levenkov 8/24/2023
错字? (“name”对于一个节点来说感觉很尴尬,但这只是命名)name.getAttribute('title')
0赞 lrhorer 8/24/2023
好吧,噗!显然这是一个问题,但我纠正了错别字,但它仍然不起作用。
0赞 Alexei Levenkov 8/24/2023
还行。。。我对 Python 一无所知......但是:最小的可重现示例似乎缺少导入,示例 XML 从“movie”节点开始,但代码假设是二级节点重复多次,XML 中没有任何属性,但代码试图获取一些“title”属性(可能您正在寻找“名称为'title'的节点”),您很有可能没有检查如何使用 minidom 获取节点的文本值(作为疯狂的代码访问 完全缺失)...同样,我对 python 一无所知,所以评论可能很偏离基础 - 阅读风险自负。firstChild
0赞 lrhorer 8/24/2023
嗯,不,当然不完全是。我确实犯了一个错误,导致图书馆消失了。“对不起。我尝试了几种不同的方法,结果相同,所以我不知道如何应对其余的。我已经在循环中尝试了 firstChild 进程,但代码并没有走得那么远。解释器在不执行任何代码的情况下进入循环,这意味着 Main 结构为空。

答:

1赞 Jiu_Zou 8/24/2023 #1

使用此代码可以正常运行。

import xml.etree.ElementTree as ET
Directory = r"C:\Users\10696\Desktop\access\kkk.xml"
for InFile in [Directory]:
    print(InFile)
    domtree = ET.parse(InFile)
    Main = domtree.findall('movie')
    for name in Main:
        Title = name.find('title').text
        print(Title)

kkk.xml

<annotation>
  <movie>
    <title>El Dorado</title>
    <originaltitle>El Dorado</originaltitle>
    <sorttitle></sorttitle>
  </movie>
</annotation>