2017-02-22 144 views
0

我正試圖從加拿大航空網站上提取包含來自雷達系統的天氣數據的XML文件。包含XML文件的URL是hereXML內容未被識別

我一直堅持在開始,我認爲它會像使用XML包中的xmlParse函數讀入URL一樣簡單。

library(XML) 

url = "https://www.aircanada.com/content/dam/aircanada/portal/data/weather/AirCanada.xml" 
xmlParse(url) 

不過,我得到以下錯誤:

Error: XML content does not seem to be XML

它清楚地是一個XML文件,所以我不知道爲什麼我收到這個錯誤。任何幫助/方向將不勝感激。

+2

... xmlParse不從URL中檢索信息。你要求它解析字符串「https://www.aircanada.com/content/dam/aircanada/portal/data/weather/AirCanada.xml」,而不是頁面。您必須添加一個參數「isURL = TRUE」 – Jean

+1

_「您不會...通過任何...自動,電子或技術設備訪問或使用...網站,包括但不限於自動腳本,機器人,爬網,屏幕刮板,網頁「機器人」,...,蜘蛛, - 宏程序或任何其他...程序,軟件,系統,算法,方法或技術......執行相同或相似的功能,以便但不限於:「數據挖掘」; 「屏幕抓取」;數據處理;訪問,提取,複製,分發,彙總或獲取信息; ......輸入或存儲信息; ......或操縱或監控本網站的任何部分或內容; – hrbrmstr

回答

0

檢查此URL處的XML文件表明它包含一些無效字符。
這是xsltproc錯誤日誌:

encoding error : input conversion failed due to input error, bytes 0x8F 0x6E 0x65 0x73 
encoding error : input conversion failed due to input error, bytes 0x8F 0x6E 0x65 0x73 
I/O error : encoder error 
AirCanada.xml:1059: parser error : AttValue: ' expected 
AirCanada.xml:1059: parser error : attributes construct error 
AirCanada.xml:1059: parser error : Couldn't find end of Start Tag SITE line 1059 
AirCanada.xml:1059: parser error : Premature end of data in tag DATAFILE line 50 
unable to parse AirCanada.xml 

消毒的AirCanada.xml文件從this SO answer該解決方案使數據可以使用,但可能有一些損失。

iconv -f utf-8 -t utf-8 -c AirCanada.xml > AirCanadaSanitized.xml 

然後,您可以使用XSLT處理器處理AirCanadaSanitized.xml