javascript解析XML生成树形结构

一个非常好的js解析xml生成一个tree 完美可以把任何xml,解析成一个tree,是用js完美呈现 立即下载

前两天一个朋友去一家公司面试,面试题是用javascript解析一个XML,生成树形结构,今天闲着没事就试了试。

源代码:

  •  
    • <html xmlns=" http://www.w3.org/1999/xhtml" >
      <head runat="server">
          <title>无标题页</title>
          <script language="javascript" charset="GB2312" type="text/javascript">
              var xmlStr='<?xml version="1.0" encoding="utf-8"?><xmlRoot value="root"><child value="c1"><child_1>c11</child_1></child><child>c2</child></xmlRoot>';
              var blank=".   ";
              var blankTimes=0;
              var blankSize=20;
             
              var idIndex=0;
              function xmlParser(xmlStr)
              {
                  var childs=null;
                  var root=null;
                  var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
                  xmlDoc.loadXML(xmlStr);
                  root=xmlDoc.documentElement;
                  //childs=root.getChild
                  //alert(root.nodeName);
                  childs=root.childNodes;
                  //alert(document.body);
                  var topDiv=document.createElement("div");
                  document.body.appendChild(topDiv);
                  //alert(topDiv);
                  dealWithNode(root,0,topDiv);
                 
              }
              function dealWithNode(node,blankTimes,container)
              {
                  var children=null;
                  var childCount=0;
                  var isLeaf=false;
                 
                  var htmlnode=null;
                  var textnode=null;
                 
                  var bl_times=blankTimes;
                  var bl_str="";
                 
                  var node_value="";
                 
      //            for(var bl=0;bl<bl_times;bl++)
      //            {
      //                bl_str=bl_str+blank;
      //            }
                 
                  if(node)
                  {
                      isLeaf=isLeafNode(node);
                     
                      if(isLeaf)
                      {
                          if(node.nodeType==3)
                          {
                              node_value=node.nodeValue;
                          }
                          else
                          {
                              node_value=node.firstChild.nodeValue;
                          }
      //                    htmlnode=document.createElement("span");
      //                    textnode=document.createTextNode(bl_str+node_value);
      //                    htmlnode.appendChild(textnode);
      //                    document.body.appendChild(htmlnode);
      //                    document.body.appendChild(document.createElement("<br>"));
                          //alert(container);
                          idIndex++;
                          htmlnode=createItem(node_value,"span"+idIndex,container);
                          htmlnode.style.paddingLeft=bl_times*blankSize;
                          //alert(node_value+"-"+bl_times);
                          //alert(node.firstChild.nodeValue);
                      }
                      else
                      {
                          node_value=getAttributValue(node,"value");
                         
      //                    htmlnode=document.createElement("span");
      //                    textnode=document.createTextNode(bl_str+node_value);
      //                    htmlnode.appendChild(textnode);
      //                    document.body.appendChild(htmlnode);
      //                    document.body.appendChild(document.createElement("<br>"));
                          idIndex++;
                          htmlnode=createItem(node_value,"span"+idIndex,container);
                          htmlnode.style.paddingLeft=bl_times*blankSize;
                          //alert(node_value+"-"+bl_times);
                          var cContainer=createChildContainer("div"+idIndex,container);
                          cContainer.style.paddingLeft=bl_times*blankSize;
                          Integration_InterceptCellEvent("span"+idIndex, "onclick", itemClick);
                          //htmlnode.onclick="itemClick('"+"div"+idIndex+"');";
                          //alert(htmlnode.onclick);
                          children=node.childNodes;
                          bl_times=1;
                          if(children&&children.length>0)
                          {
                              for(var i=0;i<children.length;i++)
                              {
                                  dealWithNode(children[i],bl_times,cContainer);
                              }
                          }
                      }
                     
                  }
              }
             
              //判断node节点是否是叶子节点
              function isLeafNode(node)
              {
                  var children=null;
                  if(node)
                  {
                      if(node.nodeType==3)
                      {
                          return true;
                      }
                      else
                      {
                          children=node.childNodes;
                          if(children.length==1&&children[0].nodeType==3)
                          {
                              return true;
                          }
                          else
                          {
                              return false;
                          }
                      }
                  }
                  return true;
              }
             
             
              //根据属性名 获取node节点的attrName属性的属性值
              function getAttributValue(node,attrName)
              {
                  var attributes=null;
                  var attr=null;
                  if(node)
                  {
                      attributes=node.attributes;
                      if(attributes&&attributes.length>0)
                      {
                          for(var attrI=0;attrI<attributes.length;attrI++)
                          {
                              attr=attributes[attrI];
                              if(attr&&attr.nodeName==attrName)
                              {
                                  return attr.nodeValue;
                              }
                          }
                      }
                  }
                  return null;
              }
             
              //创建项
              function createItem(itemText,idStr,parentContainer)
              {
                  var htmlnode=null;
                  var textnode=null;
                  htmlnode=document.createElement("a");
                  htmlnode.id=idStr;
                  htmlnode.href="#";
                  //htmlnode.style.paddingLeft="200";
                  //htmlnode.expanded="fales";
                  textnode=document.createTextNode(itemText);
                  htmlnode.appendChild(textnode);
                 
                  //alert(parentContainer);
                  parentContainer.appendChild(htmlnode);
                  parentContainer.appendChild(document.createElement("<br>"));
                  return htmlnode;
              }
             
              //创建非叶子节点的子节点的容器
              function createChildContainer(idStr,parentContainer)
              {
                  var cContainer=null;
                  cContainer=document.createElement("div");
                  cContainer.id=idStr;
                  cContainer.style.display="none";
                  parentContainer.appendChild(cContainer);
                  return cContainer;
              }
             
              //单击事件
              function itemClick()
              {
                  var conId=this.id.replace("span","div")
                  var container=document.getElementById(conId);
                  if(container)
                  {
                      if(container.style.display=="block")
                          container.style.display="none";
                      else
                          container.style.display="block";
                  }
                  //alert(conId);
              }
             
             
              function Integration_InterceptCellEvent(id, evt, func)
              {
                  if (func.constructor == Function)
                  {
                      document.write('<scr' + 'ipt for="' + id + '" event="' + evt + '">'
                              + 'Array.prototype.push.call(arguments, "' + evt + '");'
                              + func.toString().match(//s*Function/s+(/S*)/s*/(/i)[1]
                              + '.apply(this, arguments);'
                              + '</sc' + 'ript>');
                  }
              }
    •     </script>
      </head>
      <body>
          <form id="form1" runat="server">
          <div>
          </div>
          </form>
          <script language="javascript">xmlParser(xmlStr);</script>
      </body>
      </html>

          
         



      简单的实现了一下,有这个效果,有时间可以好好封装一下。

  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
js读取xml文件,生成树型结构 这是一个js读取xml文件的例子。因为ajax执行后返回的也是一个xml文件,这个例子做的就是最终生成的树形结构。 立即下载

相关推荐

JS读取XML字符串形成树

JS读取XML字符串形成树,针对数据量大的XML字符串读取与树结构拼接

VUE 扁平化数据结构转换为 el-tree 树结构数据 方法封装

【代码】VUE 扁平化数据结构转换为 el-tree 树结构数据 方法封装。

SYBFRG的博客 1168

大白话系列:什么是微服务

用大白话和实际例子来通俗易懂地告诉你什么是微服务~

2401_87403086的博客 1242

Vue基础知识总结 5:vue实现树形结构

一、前言 开发过程中,涉及到多级菜单的应用,树形结构比较常见,今天就做了一个Spring Boot + Vue + Element-UI 实现树形结构的一个小demo。 Tree组件最适合的结构是无序列列表ul,创建一个递归组件Item表示Tree选项,如果当前Item存在 children,则递归渲染子树,以此类推;同时添加一个标识管理理当前层级item的展开状态。 效果展示: 二、代码实例 1、数据库设计 2、实体类 一般树形结构都是创建若干层实体类,然后通过list结合在一起,面

学Java,找哪吒 1万+

Cadence PCB SI仿真实战:如何手动添加VIA过孔模型提升板级链路精度

本文详细介绍了在Cadence PCB SI仿真中如何手动添加VIA过孔模型以提升DDR4/5设计的精度。通过参数化建模和三维全波建模技术,工程师可以有效解决高速设计中的信号完整性问题,显著降低仿真误差。文章还提供了实战案例和常见问题解决方案,帮助优化板级链路性能。

weixin_28683391的博客 409

【DRAM存储器五十五】LPDDR5介绍--command bus training

本文详细介绍了LPDDR5命令总线训练(CBT)的两种模式操作流程。在启用ODT进行高频/中频操作前,必须对命令总线进行训练,包括调整VREF(CA)电压和CA/CS信号时序。两种模式的主要区别在于VREF(CA)设置方式:模式1通过MR12直接设置,模式2通过DMI[0]引脚捕获DQ[6:0]数据更新MR12。训练流程涉及频率切换、模式寄存器配置、pattern发送及结果采样等步骤,最终确定最佳VREF(CA)和时序参数。文章还分析了不同PHY实现可能存在的差异,如训练pattern生成方式和采样次数等。

highman110的博客 649

Vue实战(三):实现树形表格

实现树形表格

阿标的博客 2106

华为MetaERP PTP采购到应付全流程解析

摘要:本文系统解析华为MetaERP中的PTP(采购到应付)全流程管理方案,涵盖从采购申请到付款执行的完整业务流程。文章详细分解了PR、PO、GR、IV、AP等关键环节的财务核算规则,并提供了预算校验、库存更新等Python代码示例。同时阐述了IT落地架构设计,包括会计引擎配置、系统集成方案及银企直连支付接口实现。该方案通过三单匹配自动化和智能会计引擎,将处理效率提升10倍(200笔/人天→2000笔/人天),实现98%的自动化率,为集团企业提供了高效的数字化财务管理样板。文中所有技术方案均需根据实际场景调

金牌架构师 1743

新作,将平行结构XML转化为树形XML结构,递归

转换的PHP代码如下 header("Content-type:text/xml;charset=utf-8"); function getRootPath(){ $biasNum = substr_count($_SERVER['PHP_SELF'], '/'); //用'/'分割当前路径字符串,并计算分割后的字符串数量 $relativePath = './'; //初始化变量$re...

web开发自学 445

机器学习项目实战案例数据集

本专栏整理了《机器学习项目实战案例》,内包含了各种不同的机器学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 3641

RK3568平台开发系列讲解:内核启动流程

第 493 行的 ENTRY 指明了了 Linux 内核入口,入口为stext,stext 定义在文件arch/arm/kernel/head.S 中 , 因此要分析Linux 内核的启动流程,就得先从文件arch/arm/kernel/head.S 的 stext 处开始分析。_mmap_switched 定义在文件 arch/arm/kernel/head-common.S,__mmap_switched 最终会调用 start_kernel 函数。⑥、r2=atags 或者设备树(dtb)首地址。

内核笔记 219

前端开发笔记:Vue将后端传来数据转换为树,并显示在el-tree上

在页面加载时,从后端接收到一个复杂的树形结构,要从中提取出节点,创建新的树,符合el-tree的data属性格式,并显示出来。

Cdccc_daye的博客 1659

Auto.js实现视频号点赞自动化

摘要:本文介绍了一个微信视频号自动化点赞的实现方案。通过定位点赞图标和数量容器,点击点赞按钮后检测点赞数变化,若发现取消点赞则自动补点。核心代码包括:1)获取点赞容器和图标;2)记录点赞前后数量;3)判断是否误取消并补点;4)循环执行点赞和滑动页面操作。该方案解决了滑动页面可能导致误取消点赞的问题,实现了自动化批量点赞功能。文章强调仅供学习参考,提醒勿滥用该技术。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 2575

javascript解析XML生成树形结构(兼容Firefox,IE9)

直接将源代码拷贝过来了     无标题页             var xmlStr='c11c2';         var blank=".   ";         var blankTimes=1;         var blankSize=40;                  var idIndex=0; //兼容IE和Firefox的XM

Core_Star的专栏 2460

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JS读取XML字符串生成树结构

根据上篇文章整理出本人所需的JS读取XML字符串生成树,这是我自己根据上面文章所说的JS文件修改的,作为存档记录,所以不做详细介绍了。////JS代码function caret(xmls) { document.write(''); // 输出一个div层用来放菜单 document.write(''); document

qq_34307209的博客 1094

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JS高效解析XML字符串生成树结构

本文介绍了一种基于JavaScript的XML字符串解析方案,通过分块处理和定时器优化实现大数据量下树形结构的顺畅加载。代码兼容主流浏览器,支持节点搜索与展开功能,提升用户交互体验。

weixin_28872035的博客 906

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

javascript 读取xml 数据

首先:xml文件(tree.xml)内容如下: [code="java"] 山东省 _blank 省份 威海市 _blank 城市 烟台市 _blank 城市 长夼村 _blank 乡镇 http://www.baidu.com/ 富镇 _blank 乡镇 ...

不懂夜的黑 146

javascript读取xml数据(转)

在网上找到一篇javascript读取xml数据很详细的文章,特转到自己博客中,一来同大家分享,二来留作资料参考!.......... /////////////////////////////////////////// 首先:xml文件(tree.xml)内容如下: &lt;?xml version="1.0" encoding="gb2312"?&gt; &lt;treeview&gt; &...

专注技术 享受生活 663

java script 读取xml (转贴)

首先:xml文件(tree.xml)内容如下: [code="java"] 山东省 _blank 省份 威海市 _blank 城市 烟台市 _blank 城市 长夼村 _blank 乡镇 http://www.baidu.com/ 富镇 _blank 乡镇 ...

kuangbaoxu21110的专栏 236

Node中使用JSZip和fast-xml-parser实现XMind 转 Markdown

本文介绍了如何使用Node.js中的JSZip和fast-xml-parser库将XMind思维导图文件转换为Markdown格式。主要内容包括: 工具概述:说明该工具能将.xmind文件批量转换为.md文件,并提取内嵌图片到images目录。 实现原理: XMind文件本质是ZIP压缩包 content.xml存储了思维导图的树形结构 详细说明了XML到Markdown的映射规则 技术栈:使用JSZip处理压缩包,fast-xml-parser解析XML,Node.js内置fs/path模块进行文件操作。

BADAO_LIUMANG_QIZHI的博客 333

DOM 是个什么东西?就是HTML的文件夹结构?

不是一个“文件夹结构”,而是浏览器在内存里把 HTML/XML 文档解析后生成的一种。DOM = 按照设计图建出来的“房子模型”,你可以进去随便改(加个房间,换个窗户)。是浏览器根据这份代码在内存中创建出来的“数据结构”。,JavaScript 能通过 DOM API(比如。HTML 文件 = 房子的设计图。等)去访问和修改页面内容。文本、属性等也会成为节点。差不多,但不完全是 🙂。就像是一份“源代码”。

weixin_40388758的博客 224
上一篇: java实现获取文本文件的编码格式
下一篇: javascript 机试题—蛇形数字
carroll0911
博客等级 码龄17年 27粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值