原文作者:aircraft
原文地址:https://www.cnblogs.com/DOMLX/p/7822962.html
解析XML文件遇到的問題
今天秦博士叫我解析一下XML文件,將里面的所有的X坐標Y坐標放在一個數組里面然后寫在文檔里讓他進行算法比對,大家都知道了啦,解析XML文件獲取里面的坐標數據什么的,當然是用前端的JS,JQ之類的來解析比較方便啦。不過我事先都沒有做過這些東西,所以只好去百度上面搜索別人的代碼來借鑒一下了。
那么問題就來了,先看這個代碼,這個就是通用的創建一個xmlDoc對象的代碼了。
1 function parseXML(xmlFile){ 2 // 創建解析XML后的DOM對象 3 var xmlDoc = null; 4 // 根據不同瀏覽器進行解析 5 if(window.DOMParser){ 6 // 其他瀏覽器 7 var parser = new DOMParser(); 8 xmlDoc = parser.parseFromString(xmlFile,"application/xml"); 9 }else{ 10 // IE瀏覽器 11 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 12 xmlDoc.async = false; 13 xmlDoc.loadXML(xmlFile); 14 } 15 return xmlDoc; 16 }
測試xml文件是這樣的,(text.xml)
1 <?xml version="1.0" encoding="utf-8" ?> 2 <DongFang> 3 <Company> 4 <cNname>1</cNname> 5 <cIP>1</cIP> 6 </Company> 7 <Company> 8 <cNname>2</cNname> 9 <cIP>2</cIP> 10 </Company> 11 <Company> 12 <cNname>3</cNname> 13 <cIP>3</cIP> 14 </Company> 15 </DongFang>
調用的方法
1 var xmldoc=parseXML(text.xml); 2 3 var elements = xmlDoc.getElementsByTagName("Company"); 4 5 for (var i = 0; i < elements.length; i++) { 6 var name = elements[i].getElementsByTagName("cNname")[0].firstChild.nodeValue; 7 var ip = elements[i].getElementsByTagName("cIP")[0].firstChild.nodeValue; 8 9 }
這個時候如果學過XML解析文件的小伙子們都知道這些代碼是沒有問題的,測試方式也是極其簡單的。跑起來的時候也確實會返回一個document對象.
DOCUMENT對象里面出現的卻不是我們要的內容,而是(parsererro),看到了沒有。這個時候得到的對象根本不是我們想要的,我們也不能對它進行什么操作。
那么這個代碼也沒錯,調用方式也沒有錯,為什么會解析不了XML文件 得到我們想要的對象呢?
嘿嘿嘿, 這是因為目前的主流瀏覽器都不支持解析本地的XML的文件,應該是為了一些安全問題之類的。反正就是不能夠直接的去解析XML了文件了。
不過因為現在解析文件,傳輸數據什么的基本都是用json了,所以這個問題很少有人會關注了。
看到這里大家可能就會有些疑惑了,那么我到底是怎么解析XML文件完成任務的呢。。。。
嘿嘿嘿,其實我也不知道怎么直接對文件進行解析,這個瀏覽器對文件進行保護,但是沒有對XML字符串進行保護。我們可以直接將XML文件中的代碼用壓縮器壓縮,然后復制粘貼到parseXML(“ ”);這里面就相當於直接解析了XML文件。這時候就返回了一個由整個XML文件內容組成得字符串對象(也相當於XML文件對象了),這時候我們想對T做什么都可以了,也可以一起做一些做愛做的事噢。
如果上面的沒有解決的話 建議可以去看看PYTHON 的解析XML 也是非常簡單 花幾分鍾學一下就行了 其他語法都跟JS很像
PYTHON解析XML文件http://www.cnblogs.com/DOMLX/p/8213442.html
大家好我是飛機,是一個想成為全棧工程師的男人。
若有興趣交流分享技術,可關注本人公眾號,里面會不定期的分享各種編程教程,和共享源碼,諸如研究分享關於c/c++,python,前端,后端,opencv,halcon,opengl,機器學習深度學習之類有關於基礎編程,圖像處理和機器視覺開發的知識