javascript中載入並解析XML字串/xml檔案

來源:互聯網
上載者:User

首先,我們需要載入這個xml檔案,js中載入xml檔案,是通過XMLDOM來進行的.

 代碼如下 複製代碼

<?xml version="1.0" encoding="utf-8" ?>
<DongFang>
  <Company>
    <cNname>1</cNname>
    <cIP>1</cIP>
  </Company>
  <Company>
    <cNname>2</cNname>
    <cIP>2</cIP>
  </Company>   
  <Company>
    <cNname>3</cNname>
    <cIP>3</cIP>
  </Company>
  <Company>
    <cNname>4</cNname>
    <cIP>4</cIP>
  </Company>
  <Company>
    <cNname>5</cNname>
    <cIP>5</cIP>
  </Company>
  <Company>
    <cNname>6</cNname>
    <cIP>6</cIP>
  </Company>
</DongFang>

htm


<html>
<head>
<script type='text/javascript'>
    loadXML = function(xmlString){
        var xmlDoc=null;
        //判斷瀏覽器的類型
        //支援IE瀏覽器
        if(!window.DOMParser && window.ActiveXObject){   //window.DOMParser 判斷是否是非ie瀏覽器
            var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsoft.XMLDOM'];
            for(var i=0;i<xmlDomVersions.length;i++){
                try{
                    xmlDoc = new ActiveXObject(xmlDomVersions[i]);
                    xmlDoc.async = false;
                    xmlDoc.loadXML(xmlString); //loadXML方法載入xml字串
                    break;
                }catch(e){
                }
            }
        }
        //支援Mozilla瀏覽器
        else if(window.DOMParser && document.implementation && document.implementation.createDocument){
            try{
                /* DOMParser 對象解析 XML 常值並返回一個 XML Document 對象。
                 * 要使用 DOMParser,使用不帶參數的建構函式來執行個體化它,然後調用其 parseFromString() 方法
                 * parseFromString(text, contentType) 參數text:要解析的 XML 標記 參數contentType文本的內容類型
                 * 可能是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一個。注意,不支援 "text/html"。
                 */
                domParser = new  DOMParser();
                xmlDoc = domParser.parseFromString(xmlString, 'text/xml');
            }catch(e){
            }
        }
        else{
            return null;
        }

        return xmlDoc;
    }
</script>
</head>
<body>
</body>
</html>

使用方法

 代碼如下 複製代碼

 var xmldoc=loadXML(text.xml)

 var elements = xmlDoc.getElementsByTagName("Company");

 for (var i = 0; i < elements.length; i++) {
                var name = elements[i].getElementsByTagName("cNname")[0].firstChild.nodeValue;
                var ip = elements[i].getElementsByTagName("cIP")[0].firstChild.nodeValue;               

}


執行個體

 代碼如下 複製代碼

<html>
<head>
<script type="text/javascript">
function parseXML()
{
text="<note>";
text=text+"<to>George</to>";
text=text+"<from>John</from>";
text=text+"<heading>Reminder</heading>";
text=text+"<body>Don't forget the meeting!</body>";
text=text+"</note>";
try //Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);
}
catch(e)
{
try //Firefox, Mozilla, Opera, etc.
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(text,"text/xml");
}
catch(e)
{
alert(e.message);
return;
}
}
document.getElementById("to").innerHTML=xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
document.getElementById("from").innerHTML=xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
document.getElementById("message").innerHTML=xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
}
</script>
</head>

<body onload="parseXML()">
<h1>W3Schools Internal Note</h1>
<p><b>To:</b> <span id="to"></span>
 
<b>From:</b> <span id="from"></span>
 
<b>Message:</b> <span id="message"></span>
</p>
</body>
</html>

友情提示如果是解析xml文檔我們不能用上面的方法,

 代碼如下 複製代碼

<script type='text/javascript'>
    loadXML = function(xmlFile){
        var xmlDoc=null;
        //判斷瀏覽器的類型
        //支援IE瀏覽器
        if(!window.DOMParser && window.ActiveXObject){
            var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsoft.XMLDOM'];
            for(var i=0;i<xmlDomVersions.length;i++){
                try{
                    xmlDoc = new ActiveXObject(xmlDomVersions[i]);
                    break;
                }catch(e){
                }
            }
        }
        //支援Mozilla瀏覽器
        else if(document.implementation && document.implementation.createDocument){
            try{
                /* document.implementation.createDocument('','',null); 方法的三個參數說明
                 * 第一個參數是包含文檔所使用的命名空間URI的字串;
                 * 第二個參數是包含文檔根項目名稱的字串;
                 * 第三個參數是要建立的文件類型(也稱為doctype)
                 */
                xmlDoc = document.implementation.createDocument('','',null);
            }catch(e){
            }
        }
        else{
            return null;
        }

        if(xmlDoc!=null){
            xmlDoc.async = false;
            xmlDoc.load(xmlFile);
        }
        return xmlDoc;
    }
</script>


可以通過xmlDoc.documentElement.childNodes(1)..childNodes(0).getAttribute('Text')進行訪問.
一些常用方法:
xmlDoc.documentElement.childNodes(0).nodeName,可以得到這個節點的名稱.
xmlDoc.documentElement.childNodes(0).nodeValue,可以得到這個節點的值. 這個值是來自於這樣子的xml格式:<a>b</b>, 於是可以得到b這個值.
xmlDoc.documentElement.childNodes(0).hasChild,可以判斷是否有子節點

根據我的經驗,最好是使用getElementsByTagName(xPath)的方法對節點進行訪問,因為這樣子可以直接通過xPath來定位節點,這樣子會有更好的效能.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.