登陆 | 免费注册(只需一分钟) | 会员中心

聚宝网   购物专题 基金专题 性专题 饮食专题 教育专题 生活大参考 园林资讯 园艺库 健康专题
  论文专题 家庭养花 园林景观 盆景奇石 激情图库 农业资料库 园林古建 英文站 花卉栽培

聚宝网免费为您提供 最新IT资讯

 

首页 > 网页设计 > Xml
XML遍历算法大征集
时间:2007-06-17  www.jubao163.com  来源: 不详

有请广大高手

希望最好能用Java或者javascript来实现

小弟先在这里贴个最简单的递归,抛砖引玉,闪先:)

<SCRIPT LANGUAGE=javascript>
  
  function loader()
  { 
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  
    var rootNode;
    
    xmlDoc.load("nav.xml");
    
    if (xmlDoc.readyState==4)
    {
      if(xmlDoc.parseError.errorCode!=0)
  {
    alert(xmlDoc.parseError.reason)
  }
      else
  {
        rootNode = xmlDoc.documentElement;
        scanXml(rootNode);
      }
    }
  }
  
  function scanXml(xmlNode)
  {
    if (xmlNode.hasChildNodes())
    {
      var nodeList = xmlNode.childNodes;

      for(var i=0;i<nodeList.length;i++)
      {
        scanXml(nodeList[i]);
      }
    }
    else
    {
      // do something
    }
  }
</SCRIPT>
---------------------------------------------------------------

//占个位置先^_^先序遍历
    var oRoot=xmlDoc.documentElement  //Root
    while(null!=oNode){
        visit(node)                   //visit node
        if(oNode.hasChildNodes()){
           oNode=oNode.firstChild
        }
        else{
          while(null!=oNode && null==oNode.nextSibling){
             oNode=oNode.parent
          }
          
          if (null!=oNode){
            oNode=oNode.nextSibling
          }
          else{
            break
          }
        }
       
     }
---------------------------------------------------------------

少一句oNode=oRoot在while前面
---------------------------------------------------------------

oNode=oNode.parent-->oNode=oNode.parentNode
信手一写,BUG一双....
---------------------------------------------------------------

最好的方法是用digester,是基于sax实现的:

http://jakarta.apache.org/struts/doc-1.0.2/api/org/apache/struts/digester/package-summary.html#package_description
---------------------------------------------------------------

ibm网站上的x-udom上有例子。
---------------------------------------------------------------

还要找属性啊?怎么不加上呢
---------------------------------------------------------------

大写意:
 creat DOM
DOM.load(file of xml)

---------------------------------------------------------------

上有误!
大写意:
 creat DOM
 DOM.load(file of xml)
 xmlnodeset=selectnode(")
 count=length(xmlnodeset)
 for i=1 to count
   get nodetype of xmlnodeset.item(i)
   get nodename of xmlnodeset.item(i).....
   (属性值要根据节点的类型判断有无
      有->count;for j=1 to count->一个一个的提取)
 end



---------------------------------------------------------------

//你看不到堆栈了,因为dom实现的不是单向链表,节点可以回溯到上一层,不必借助堆栈来实现.后根遍历:
    var oRoot=xmlDoc.documentElement  //Root
    while(null!=oNode){
        if(oNode.hasChildNodes()){
           oNode=oNode.firstChild
        }
        else{
          visit(node)                   //visit node
          while(null!=oNode && null==oNode.nextSibling){
             oNode=oNode.parent
             if (null != oNode){
               visit(node)                   //visit parent node
             }
          }
          
          if (null!=oNode){
            oNode=oNode.nextSibling
          }
          else{
            break
          }
        }
       
     }




推荐文章
联盟网站

浙ICP备 :07003766号 Copyright © 2001-2007 JUBAO163,All rights reserved.