<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-84  評論-56  文章-0  trackbacks-0
     

    responseXML 將響應(yīng)解析為XML

    Ø 瀏覽器把XML 看作是遵循W3C DOM 的XML文檔。

    Ø W3C DOM 指定了一組很豐富的API ,可用于搜索和處理XML 文擋。

    W3C DOM

    Ø W3C 提供的定義:

    文檔對象模型(DOM) 是與平臺和語言無關(guān)的接口,允許程序和腳本動態(tài)地訪問和更新文檔的內(nèi)容、結(jié)構(gòu)和樣式。文檔可以進(jìn)一步處理,處理的結(jié)果可以放回到所提供的頁面中。

    W3C DOM 和JavaScript區(qū)別?

    Ø DOM 是面向HTML 和XML 文檔的API,為文檔提供了結(jié)構(gòu)化表示,并定義了如何通過腳本來訪問文檔結(jié)構(gòu)。

    Ø JavaScript 則是用于訪問和處理DOM 的語言。

    Ø 如果沒有DOM , JavaScript 根本沒有Web 頁面和構(gòu)成頁面元素的概念。文檔中的每個元素都是DOM 的一部分,這就使得JavaScript 可以訪問元素的屬性和方法。

    DOM元素屬性

    Ø 用于處理XML 文擋的DOM 元素屬性:

    屬性名

    描述

    childNodes

    返回當(dāng)前元素的所有子元素的數(shù)組

    firstChild

    返回當(dāng)前元素的第一個下級子元素

    lastChild

    返回當(dāng)前元素的最后一個子元素

    nextSibling

    返回緊跟在當(dāng)前元素后面的元素

    nodeValue

    指定表示元素值得讀/寫屬性

    parentNode

    返回元素的父節(jié)點(diǎn)

    previousSibling

    返回緊鄰當(dāng)前元素之前的元素

    DOM元素方法

    Ø 用于遍歷XML文擋的DOM 元素方法

    方法名

    描述

    getElementById(id) (document)

    獲取有指定唯一ID屬性值文檔中的元素

    getElementsByTagName(name)

    返回當(dāng)前元素中有指定標(biāo)記名的子元素的數(shù)組

    hasChildNodes()

    返回一個布爾值,指示元素之否有子元素

    getAttribute(name)

    返回元素的屬性值,屬性由name指定

    DEMO responseXML + DOM

    Ø DEMO

    服務(wù)器返回的美國州名列表 parseXML.xml

    <?xml version="1.0" encoding="UTF-8"?>      

    <states>

        <north>

            <state>Minnesota</state>

            <state>Iowa</state>

            <state>North Dakota</state>

        </north>

        <south>

            <state>Texas</state>

            <state>Oklahoma</state>

            <state>Louisiana</state>

        </south>  

     <east>

            <state>New York</state>

            <state>North Carolina</state>

            <state>Massachusetts</state>

      </east>

      <west>

            <state>California</state>

            <state>Oregon</state>

            <state>Nevada</state>

        </west>

    </states>

    Ø parseXML.html內(nèi)容

    <html>

             <head>

                       <title>Parsing XML Responses with the W3C DOM</title>

                       <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

                       <script type="text/javascript">

    var xmlHttp;

    var requestType = "";

    function createXMLHttpRequest() {

        if (window.ActiveXObject) {

            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

        } 

        else if (window.XMLHttpRequest) {

            xmlHttp = new XMLHttpRequest();

        }

    }

    function startRequest(requestedList) {

        requestType = requestedList;

        createXMLHttpRequest();

        xmlHttp.onreadystatechange = handleStateChange;

        xmlHttp.open("GET", "parseXML.xml", true);

        xmlHttp.send(null);

    }

    function handleStateChange() {

        if(xmlHttp.readyState == 4) {

            if(xmlHttp.status == 200) {

                if(requestType == "north") {

                    listNorthStates();

                }

                else if(requestType == "all") {

                    listAllStates();

                }

            }

        }

    }

    function listAllStates() {

        var xmlDoc = xmlHttp.responseXML;

        var allStates = xmlDoc.getElementsByTagName("state");

        outputList("All States in Document", allStates);

    }

    function listNorthStates() {

        var xmlDoc = xmlHttp.responseXML;

        var northNode = xmlDoc.getElementsByTagName("north")[0];

                var out = "Northern States";

        var northStates = northNode.getElementsByTagName("state");

        outputList("Northern States", northStates);

    }

    </script>

    </head>

    <body onload="startRequest();">

    </body>

    </html>

    使用W3C DOM 動態(tài)編輯頁面

    Ø 使用W3C DOM 動態(tài)編輯頁面

    Ø 動態(tài)創(chuàng)建內(nèi)容時所用的W3C DOM 屬性和方法

    屬性、方法名

    描述

    document.createElement(tagName)

    文檔對象上的createElement 方法可以創(chuàng)建由tagName指定的元素。如果以串div作為方法參數(shù),就會動態(tài)生成一個div元素

    document.createTextNode(data)

    文檔對象的createTextNode方法會創(chuàng)建一個包含靜態(tài)文本的節(jié)點(diǎn)

    <Element>.appendChild(newChild)

    appendChild方法將指定的節(jié)點(diǎn)增加到當(dāng)前元素的子節(jié)點(diǎn)列表(作為一個新的子節(jié)點(diǎn)。)例如,可以增加一個option元素,作為select元素的子節(jié)點(diǎn)

    <Element>. getAttribute(name)

    這個方法獲得元素中name屬性的值

    <Element>. setAttribute(name,value)

    這個方法設(shè)置元素中name屬性的值

    <Element>.insertBefore(newChild, refChild)

    這個方法將節(jié)點(diǎn)newChild作為當(dāng)前元素的子節(jié)點(diǎn)插入refChild元素前面

    <Element>.removeAttribute(name)

    這個方法從元素中刪除屬性name

    <Element>.removeChild(oldChild)

    這個方法從元素中刪除子元素oldChild

    <Element>.replaceChild(newChild, refChild)

    這個方法將節(jié)點(diǎn)refChild替換為節(jié)點(diǎn)newChild

    <Element>.hasChildNodes()

    這個方法返回一個布爾值,指示元素是否有子元素

    DEMO 使用responseXMLDOM 動態(tài)編輯頁面

    Ø dynamicContent.xml文件內(nèi)容

    <?xml version="1.0" encoding="UTF-8"?>

    <properties>

        <property>

            <address>812 Gwyn Ave</address>

            <price>$100,000</price>

            <comments>Quiet, serene neighborhood</comments>

        </property>

        <property>

            <address>3308 James Ave S</address>

            <price>$110,000</price>

            <comments>Close to schools, shopping,entertainment</comments>

        </property>

        <property>

            <address>98320 County Rd 113</address>

            <price>$115,000</price>

            <comments>Small acreage outside of town</comments>

        </property>

    </properties>

    Ø 然后撰寫dynamicContent.html文件的內(nèi)容

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

            "http://www.w3.org/TR/html4/loose.dtd">

    <html>

    <head>

        <title>Dynamically Editing Page Content</title>

        <script type="text/javascript" language="javascript">

            var xmlHttp;

            function createXMLHttpRequest() {

                if (window.ActiveXObject) {

                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

                } else if (window.XMLHttpRequest) {

                    xmlHttp = new XMLHttpRequest();

                }

            }

            function doSearch() {

                createXMLHttpRequest();

                xmlHttp.onreadystatechange = handleStateChange;

                xmlHttp.open("GET", "dynamicContent.xml", true);

                xmlHttp.send(null);

            }

            function handleStateChange() {

                if (xmlHttp.readyState == 4) {

                    if (xmlHttp.status == 200) {

                        clearPreviousResults();

                        parseResults();

                    }

                }

            }

            function clearPreviousResults() {

                var header = document.getElementById("header");

                if (header.hasChildNodes()) {

                    header.removeChild(header.childNodes[0]);

                }

                var tableBody = document.getElementById("resultsBody");

                while (tableBody.childNodes > 0) {

                    tableBody.removeChild(tableBody.childNodes[0]);

                }

            }

            function parseResults() {

                var results = xmlHttp.responseXML;

                var property = null;

                var address = "";

                var price = "";

                var comments = "";

                var properties = results.getElementsByTagName("property");

                for (var i = 0; i < properties.length; i++) {

                    property = properties[i];

                    address = property.getElementsByTagName("address")[0].firstChild.nodeValue;

                    price = property.getElementsByTagName("price")[0].firstChild.nodeValue;

                    comments = property.getElementsByTagName("comments")[0].firstChild.nodeValue;

                    addTableRow(address, price, comments);

                }

                var header = document.createElement("h2");

                var headerText = document.createTextNode("Results:");

                header.appendChild(headerText);

                document.getElementById("header").appendChild(header);

                document.getElementById("resultsTable").setAttribute("border", "1");

            }

            function addTableRow(address, price, comments) {

                var row = document.createElement("tr");

                var cell = createCellWithText(address);

                row.appendChild(cell);

                cell = createCellWithText(price);

                row.appendChild(cell);

                cell = createCellWithText(comments);

                row.appendChild(cell);

                document.getElementById("resultsBody").appendChild(row);

            }

            function createCellWithText(text) {

                var cell = document.createElement("td");

                var textNode = document.createTextNode(text);

                cell.appendChild(textNode);

                return cell;

            }

        </script>

    </head>

    <body>

        <form action="#" >

            <select>

                <option value="50000">$50,000</option>

                <option value="100000">$100,000</option>

                <option value="150000">$150,000</option>

            </select> to

            <select>

                <option value="100000">$100,000</option>

                <option value="150000">$150,000</option>

                <option value="200000">$200,000</option>

            </select>

            <input type="button" value="Search" onclick="doSearch();"/>

        </form>

        <span id="header"></span>

        <table id="resultsTable" width="75%" border="0">

            <tbody id="resultsBody"></tbody>

        </table>

    </body>

    </html>

    Ø 運(yùn)行界面,點(diǎn)擊“search”按鈕,如下圖:



     

    Ø 總結(jié):

    1、 parseResults 函數(shù)中使用XMLHttpRequest對象的responseXML 屬性得到的XML 文擋。

    2、 利用DOM方法來解析XML文檔。

    3、 addTableRow 函數(shù)建立一個表。

    4、 就這么多!你已經(jīng)成功地讀取了服務(wù)器返回的XML 文檔,而且動態(tài)創(chuàng)建了一個結(jié)果表。




    作者:周大慶(zhoudaqing)
    網(wǎng)址:http://www.tkk7.com/yifeng
    >>>轉(zhuǎn)載請注明出處!<<<

    posted on 2008-08-26 02:42 憶風(fēng) 閱讀(186) 評論(0)  編輯  收藏 所屬分類: Ajax
    主站蜘蛛池模板: 亚洲日本在线观看| 免费国产a国产片高清网站| 国产午夜亚洲精品不卡| 久久青青草原亚洲av无码app| 日韩亚洲国产综合久久久| 九九九精品成人免费视频| 亚洲欧洲国产精品久久| 国产成人免费高清激情视频| 国产成人精品免费久久久久| 亚洲欧洲日韩综合| 亚洲精品卡2卡3卡4卡5卡区| 天天影视色香欲综合免费| 亚洲综合色一区二区三区| 亚洲国产一区明星换脸| 国产精品无码一二区免费 | 亚洲精品人成无码中文毛片 | 亚洲JIZZJIZZ妇女| 亚洲国产最大av| 亚洲无砖砖区免费| 99久久亚洲精品无码毛片| 亚洲国产精品无码久久一线 | 精品一区二区三区高清免费观看 | 青娱分类视频精品免费2| 污视频网站免费观看| 亚洲av无码日韩av无码网站冲| 亚洲综合在线一区二区三区| 亚洲人成激情在线播放| 亚洲欧洲自拍拍偷精品 美利坚| 国产成人一区二区三区免费视频| 成年女人男人免费视频播放 | 亚洲欧洲∨国产一区二区三区| 亚洲AV无码一区二区三区在线观看| 日韩免费高清一级毛片在线| 最近中文字幕大全免费版在线| 精品一区二区三区免费观看| 91精品成人免费国产| 日本中文字幕免费高清视频| 日韩精品极品视频在线观看免费 | 亚洲国产成人影院播放| 亚洲国产成人精品无码久久久久久综合| 亚洲欧洲久久久精品|