2016-12-16 56 views
1

我想用Python使用minidom解析XML。當我從文件系統解析XML文件時,我沒有任何問題。python minidom:'NoneType'對象沒有來自url的屬性'data'

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) 

我有一個錯誤信息 enter image description here

顯然,這是在路徑和URL相同的XML 。謝謝

+1

那你使用的是什麼庫?當我做'pip search minidom'時,它會給出'DOMWrap(0.1)','enhancedminidom(0.2)'和'gxml(0.5)'。 – Eddie

+0

@Eddie它是在python標準庫我想:https://docs.python.org/2/library/xml.dom.minidom.html – har07

+0

@Luis Manrique酷,你可以發佈一個示例XML文件以及? – Eddie

回答

1

嘗試新的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> 
+0

運行'python3 -m http.server'從XML文件所在的文件夾運行測試HTTP服務器 – Eddie

+0

我在嘗試此選項,但我有一個導入請求的新問題。我正在研究它 –

+0

'urllib'是一個文件夾,'request'是一個python文件。也許你錯過了一些東西。當我嘗試'import urllib'和'print(urllib .__ path __)'時,我可以看到urllib文件夾位於'/ home/eddie/.pyenv/versions/3.5.2/lib/python3.5/urllib'中。在該文件夾中,我可以看到文件'request.py'。如果你還沒有,我會極力鼓勵你使用某種Python虛擬環境。 – Eddie

1

urlopen函數返回一個HttpResponse對象。你必須首先調用該對象的read()方法獲得響應的實際內容,並傳遞到minidom命名

minidom.parse(url.read()) 
+0

這樣讀取的XML文件就像一個沒有格式的完整文件。我不能使用它 –

相關問題