JS如何遍历有层叠结构的XML?

<IS><yeartime="2014"><majorname="ComputerScience"><class>1401</class><class>1402</cla... <IS>
<year time="2014">
<major name="Computer Science">
<class>1401</class>
<class>1402</class>
<class>1403</class>
<class>1404</class>
</major>
<major name="Communication Engineering">
<class>1405</class>
<class>1406</class>
<class>1407</class>
<class>1408</class>
</major>
</year>

<year time="2013">
<major name="Computer Science">
<class>1301</class>
<class>1302</class>
<class>1303</class>
<class>1304</class>
</major>
<major name="Communication Engineering">
<class>1305</class>
<class>1306</class>
<class>1307</class>
<class>1308</class>
</major>
</year>
</IS>

如何遍历这个XML。
一般的getElementByTagName()获得的信息都是平行的,有没有类似"major".getElementByTagName("class")的方法,获取某个父元素节点下的子元素节点?
展开
 我来答
cqzhangkang
2014-03-31 · TA获得超过528个赞
知道小有建树答主
回答量:151
采纳率:57%
帮助的人:66.9万
展开全部

首先加载xml字符串的方法:

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

然后遍历xml:

window.onload = function(){
var text = document.getElementById('aaa').value;
var xmldoc=loadXML(text);
 var elements = xmldoc.getElementsByTagName("major");
 for (var i = 0; i < elements.length; i++) {
var value = elements[i].getElementsByTagName("class")[0].firstChild.nodeValue;
alert(value);
}
}


html:

<textarea id="aaa">
<IS>
    <year time="2014">
        <major name="Computer Science">
            <class>1401</class>
            <class>1402</class>
            <class>1403</class>
            <class>1404</class>
        </major>
        <major name="Communication Engineering">
            <class>1405</class>
            <class>1406</class>
            <class>1407</class>
            <class>1408</class>
        </major>
    </year>
 
    <year time="2013">
        <major name="Computer Science">
            <class>1301</class>
            <class>1302</class>
            <class>1303</class>
            <class>1304</class>
        </major>
        <major name="Communication Engineering">
            <class>1305</class>
            <class>1306</class>
            <class>1307</class>
            <class>1308</class>
        </major>
    </year>
</IS>
</textarea>


AlbertGlory
2014-03-31 · TA获得超过219个赞
知道小有建树答主
回答量:76
采纳率:100%
帮助的人:76.2万
展开全部
如果要通用的遍历的话,js不是太好用,毕竟他不是完全的面向对象。如果在知道结构的情况下遍历倒是不难,建议用jquery
完全可以var major=$("year[time='2014']>major:eq(0));
var class1401=$(major).children("class").eq(0);
这样就找到了1401那个class了
更多追问追答
追问
你好,首先谢谢你的回答。

jQuery用的不多,听你说的那个意思应该是找出1401对应的,但我想要的是显示整个XML到HTML上。显示完后做成复选框的样子,一层一层展开,当然那就是后期的工作了。

有什么好办法能全部显示出XML众的各个节点内容吗?
追答
你的xml的数据来源在哪?直接在html里面么?还是有个xml文件从后台读取的?如果是从后台读取的,建议你在后台进行处理。比如你用java可以考虑用jdom或者sax。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式