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

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

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

    隨筆-84  評(píng)論-56  文章-0  trackbacks-0
     

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

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

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

    W3C DOM

    Ø W3C 提供的定義:

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

    W3C DOM 和JavaScript區(qū)別?

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

    Ø JavaScript 則是用于訪問(wèn)和處理DOM 的語(yǔ)言。

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

    DOM元素屬性

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

    屬性名

    描述

    childNodes

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

    firstChild

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

    lastChild

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

    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()

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

    getAttribute(name)

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

    DEMO responseXML + DOM

    Ø DEMO

    服務(wù)器返回的美國(guó)州名列表 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 動(dòng)態(tài)編輯頁(yè)面

    Ø 使用W3C DOM 動(dòng)態(tài)編輯頁(yè)面

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

    屬性、方法名

    描述

    document.createElement(tagName)

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

    document.createTextNode(data)

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

    <Element>.appendChild(newChild)

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

    <Element>. getAttribute(name)

    這個(gè)方法獲得元素中name屬性的值

    <Element>. setAttribute(name,value)

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

    <Element>.insertBefore(newChild, refChild)

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

    <Element>.removeAttribute(name)

    這個(gè)方法從元素中刪除屬性name

    <Element>.removeChild(oldChild)

    這個(gè)方法從元素中刪除子元素oldChild

    <Element>.replaceChild(newChild, refChild)

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

    <Element>.hasChildNodes()

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

    DEMO 使用responseXMLDOM 動(dòng)態(tài)編輯頁(yè)面

    Ø 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對(duì)象的responseXML 屬性得到的XML 文擋。

    2、 利用DOM方法來(lái)解析XML文檔。

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

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




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

    posted on 2008-08-26 02:42 憶風(fēng) 閱讀(197) 評(píng)論(0)  編輯  收藏 所屬分類: Ajax
    主站蜘蛛池模板: 一个人看的www在线免费视频 | 亚洲欧洲另类春色校园网站| 成年人免费观看视频网站| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲国产婷婷香蕉久久久久久| 免费观看91视频| 亚洲色成人网站WWW永久四虎 | 成人永久免费福利视频网站| 亚洲视频在线免费| 亚洲AV无码精品蜜桃| 亚洲国产V高清在线观看| 6080午夜一级毛片免费看6080夜福利 | 日韩免费视频网站| 成全视频在线观看免费| 亚洲午夜精品久久久久久app| 亚洲欧洲成人精品香蕉网| 最近最新MV在线观看免费高清| 一本大道一卡二大卡三卡免费| 精品亚洲国产成人| 亚洲精品无码永久中文字幕| 免费高清在线爱做视频| 四虎影视成人永久免费观看视频| 春暖花开亚洲性无区一区二区| 99久久亚洲综合精品成人网| 亚洲精品国产综合久久一线| 人与禽交免费网站视频| 中国性猛交xxxxx免费看| 亚洲av无码无线在线观看| 亚洲最新永久在线观看| 亚洲无码黄色网址| 永久黄网站色视频免费| 99热精品在线免费观看| 精品无码一级毛片免费视频观看| 中国china体内裑精亚洲日本| 亚洲乱色熟女一区二区三区丝袜| 日韩在线视频免费看| 思思re热免费精品视频66| 成全视频高清免费观看电视剧 | 好大好深好猛好爽视频免费| 99国产精品免费观看视频| 中国人免费观看高清在线观看二区|