【问题标题】:python minidom: 'NoneType' object has no attribute 'data' from urlpython minidom:'NoneType'对象没有来自url的属性'data'
【发布时间】:2016-12-16 12:39:08
【问题描述】:

我正在尝试使用 minidom 使用 Python 解析 XML。当我从我的文件系统解析一个 xml 文件时,我没有任何问题。

doc = minidom.parse("PATH HERE")
etiquetaDia = doc.getElementsByTagName("dia")
for dia in etiquetaDia:
    probPrecip = dia.getElementsByTagName("maxima")[0]      
    print(probPrecip.firstChild.data)

但是当我尝试使用此代码从 url 解析 XML 时:

url = urllib2.urlopen('URL HERE') 
doc = minidom.parse(url)
etiquetaDia = doc.getElementsByTagName("dia")
for dia in etiquetaDia:
    probPrecip = dia.getElementsByTagName("maxima")[0]      
    print(probPrecip.firstChild.data)   

我有一条错误消息

显然它在路径和 url 中是相同的 XML。谢谢

【问题讨论】:

  • 那么您使用的是什么库?当我执行pip search minidom 时,它会给出DOMWrap (0.1)enhancedminidom (0.2)gxml (0.5)
  • @Eddie 我想它在 python 标准库中:docs.python.org/2/library/xml.dom.minidom.html
  • @Luis Manrique Cool,您能否也发布一个示例 XML 文件?
  • 我使用的库来自 xml.dom import minidom from urllib import request

标签: python xml parsing xml-parsing minidom


【解决方案1】:

urlopen 函数返回一个HttpResponse 对象。您必须先调用该对象的read() 方法来获取响应的实际内容,并将其传递给minidom

minidom.parse(url.read())

【讨论】:

  • 这读取xml文件就像一个没有格式的完整文件。我不能用它
【解决方案2】:

尝试使用新的 urllib 库,如下所示。 它打印出你好。这就是你想要的吗?

from xml.dom import minidom
from urllib import request

url = request.urlopen('http://localhost:8000/sample.xml')
doc = minidom.parse(url)
etiquetaDia = doc.getElementsByTagName("dia")
for dia in etiquetaDia:
    probPrecip = dia.getElementsByTagName("maxima")[0]
    print(probPrecip.firstChild.data)

示例 XML

<?xml version="1.0" encoding="UTF-8"?>
<dia>
    <maxima>Hello</maxima>
</dia>

【讨论】:

  • 运行 python3 -m http.server 从您的 XML 文件所在的文件夹运行测试 HTTP 服务器
  • 我正在尝试这个选项,但我在导入请求时遇到了新问题。我正在努力
  • urllib 是一个文件夹,request 是一个 python 文件。也许你错过了一些东西。当我尝试import urllibprint(urllib.__path__) 时,我可以看到urllib 文件夹位于/home/eddie/.pyenv/versions/3.5.2/lib/python3.5/urllib 中。在该文件夹中,我可以看到文件request.py。如果你还没有,我强烈建议你使用某种 Python 虚拟环境。
  • 终于运行了。谢谢大家!。
猜你喜欢
  • 2013-04-19
  • 2019-10-03
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多