XML 解析器

修改后完整 index.html(改动很小,只增加XML DOM解析,原有代码保留)

只改成功回调内部:把A3改成展示解析后的内容,保留原有逻辑,增加alert弹出<to>的值,ddd.xml你直接用上面这份即可

<html>
<head>
    <script type="text/javascript">
        var xmlhttp;
        //通过URL加载XML文档
        function loadXMLDoc(url) {
            xmlhttp = null;
            if (window.XMLHttpRequest) {// code for IE7, Firefox, Opera, etc.
                xmlhttp = new XMLHttpRequest();
            }
            else if (window.ActiveXObject) {// code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            if (xmlhttp != null) {
                xmlhttp.onreadystatechange = state_Change;
                xmlhttp.open("GET", url, true);
                xmlhttp.send(null);
            }
            else {
                alert("你的浏览器不支持XMLHttpRequest");
            }
        }

        //根据状态 显示内容
        function state_Change() {
            if (xmlhttp.readyState == 4) {// 4 = "loaded"
                if (xmlhttp.status == 200) {// 200 = "OK"
                    document.getElementById('A1').innerHTML = xmlhttp.status;
                    document.getElementById('A2').innerHTML = xmlhttp.statusText;
                    // 这里使用 responseXML 获取XML DOM对象
                    var xmlDoc = xmlhttp.responseXML;
                    // 获取to标签文本
                    var toText = xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
                    document.getElementById('A3').innerHTML = toText;
                    alert(xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue);
                }
                else {
                    alert("Problem retrieving XML data:" + xmlhttp.statusText);
                }
            }
        }
    </script>
</head>

<body>
    <h2>远程加载XML内容</h2>

    <p>
        <b>状态:</b>
        <span id="A1"></span>
    </p>

    <p>
        <b>状态文本:</b>
        <span id="A2"></span>
    </p>

    <p>
        <b>文档内容(to节点):</b>
        <br /><span id="A3"></span>
    </p>

    <button onclick="loadXMLDoc('/ddd.xml?t=1')">获取内容</button>

</body>
</html>Code language: HTML, XML (xml)

ddd.xml(你给的版本)

<?xml version="1.0" ?> 
<note>
	<to>bamn.cn</to> 
	<from>John</from> 
	<heading>Reminder</heading> 
	<body>Don't forget the meeting!</body> 
</note>Code language: HTML, XML (xml)

核心代码片段(重点,就是你写的那句)

var xmlDoc = xmlhttp.responseXML;
alert(xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue);Code language: JavaScript (javascript)
  • xmlhttp.responseXML:浏览器自动把返回的XML字符串解析成XML DOM树对象,就可以用DOM方法读取节点
  • getElementsByTagName("to")[0]:找到文档里第一个<to>元素
  • childNodes[0]<to>标签里面的文本子节点
  • nodeValue:取出文本内容,也就是 bamn.cn

运行效果

点击按钮:

  1. A1 显示 200
  2. A2 显示 OK
  3. A3 显示 bamn.cn
  4. 弹出alert框,内容:

小提示:如果想同时取出 from / heading / body,继续套用同一种写法即可:

var fromText = xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
var bodyText = xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;Code language: JavaScript (javascript)

需要我把页面改成一次性把四个节点(to/from/heading/body)全部展示到页面上吗?保持整体代码风格不变。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注