递规法遍历xml树的属性和节点值

news/2024/7/6 13:36:37

注: function xml2javascript(xml_name, data) //参数xml_name: xml文档文件名,data:存储数据的数组对象名 转换成功后调用数组,基本按照dom的调用方法,只不过将'()'转换为'[]'

<SCRIPT LANGUAGE="JavaScript">

/**
* 递归法读xml所有数据(包括属性值)放入数组
*
*/
function xml2javascript(xml_name, data)
{
// +----------------------------------------------------+
// | 建立MSXML.DOMDocument     |
var xml_doc = new ActiveXObject("MSXML.DOMDocument");
xml_doc.async = false;
xml_doc.load(xml_name);
// +----------------------------------------------------+
var obj       = xml_doc.documentElement;
var data_obj = data;
eval(data_obj + "=new Object();");
_getXml(obj, data_obj)
}

/**
* 内部函数
*
*/
function _getXml(obj, data_obj)
{
var node_count = obj.childNodes.length;
if (node_count == 0) { //如果没有子节点,那么返回
   return;
}
eval(data_obj + ".childNodes=new Array();");
eval(data_obj + "._childNodes=new Array();");
for (var i=0; i<node_count; i++) {
   if (obj.childNodes(i).nodeName == '#text') {
    eval(data_obj + ".text=obj.text;"); //元素名称
    return;
   }
   if (obj.childNodes(i).nodeName == '#cdata-section') {
    eval(data_obj + ".text= obj.text;");
    return;
   }
   eval(data_obj + ".childNodes[i]=new Object();"); //新建一个元素
   eval(data_obj + ".childNodes[i].nodeName=obj.childNodes(i).nodeName;"); //元素名称
  
   eval(data_obj + "._childNodes[obj.childNodes(i).nodeName]=i;"); //元素缓存

   //属性
   var attribute_count = obj.childNodes(i).attributes.length;
   eval(data_obj + ".childNodes[i].attributes=new Array();"); //属性数组
   eval(data_obj + ".childNodes[i]._attributes=new Array();"); //属性缓存数组
   for (var j=0; j<attribute_count; j++) {
    eval(data_obj + ".childNodes[i].attributes[j]=new Object();");
    eval(data_obj + ".childNodes[i].attributes[j].nodeName=obj.childNodes(i).attributes(j).nodeName;");
    eval(data_obj + ".childNodes[i].attributes[j].text=obj.childNodes(i).attributes(j).text;");
   
    eval(data_obj + ".childNodes[i]._attributes[obj.childNodes(i).attributes(j).nodeName]=j;");
   }
  
   var obj_       = obj.childNodes(i);
   var data_obj_ = data_obj + ".childNodes[" + i + "]";
   _getXml(obj_, data_obj_);
}
}

//调用示例
xml2javascript('message.xml', 'aaa');
alert(aaa.childNodes[0].childNodes[1].nodeName);
alert(aaa.childNodes[0].childNodes[1].text);
//alert(aaa.childNodes[0].childNodes[1].attributes[0].text);

</SCRIPT>


http://www.niftyadmin.cn/n/4303174.html

相关文章

Android This view is not constrained, it only has designtime positions 解决办法(不同版本AS)

在Android studio中使用ConstraintLayout布局时&#xff0c;再次使用其他的控件时&#xff0c;会报异常&#xff0c;控件下有红色的波浪线&#xff0c;问题是View没有被约束&#xff0c;需要添加约束。   这个时候要注意的是&#xff0c; 当你的AS版本是3.X以前的版本时&…

android.view.InflateException: Binary XML file line #0: Error inflating class unknown 解决办法

项目跑成功了&#xff0c;打开后进入一个activity时出问题&#xff0c;崩溃&#xff0c;报错   可以将问题定位在XML文件出了问题。   出错误的地方大概率是下面几种情况&#xff0c;可以根据错误日志进行排查。 首先重构一下项目&#xff0c;rebuild project&#xf…

[C#]c#面试笔试题(一)

一.填空题 1.c#中的三元运算符是_____? 2.当整数a赋值给一个object对象时&#xff0c;整数a将会被_____? 3.类成员有_____种可访问形式&#xff1f; 4.public static const int A1;这段代码有错误么&#xff1f;是什么&#xff1f; 5.float f-123.567F; int i(int)f; …

MapReduce数据流(三)

额外的MapReduce功能 图4.6 插入了Combiner的MapReduce数据流  Combiner&#xff1a;前面展示的流水线忽略了一个可以优化MapReduce作业所使用带宽的步骤&#xff0c;这个过程叫Combiner&#xff0c;它在Mapper之后Reducer之前运行。Combiner是可选的&#xff0c;如果这个过程…

[C#]c#面试笔试题(二)

一、选择填空题&#xff08;每空2分&#xff0c;共60分&#xff09; 1.在对SQL Server 数据库操作时应选用&#xff08;&#xff09;。 a)SQL Server .NET Framework 数据提供程序&#xff1b; b)OLE DB .NET Framework 数据提供程序&#xff1b; c)ODBC .NET Framework 数据提…

Android Edittext 关掉软键盘自动弹出

在开发中&#xff0c;遇见了在这样的需求&#xff0c;打开一个页面有一个EditText&#xff0c;进入都还没加载利索就自动打开了软键盘&#xff0c;不能够第一眼看到整个页面的设计&#xff0c;感觉很不友好&#xff0c;需要将软键盘的自动打开关掉。      法&#xff11;…

[C#]C#面试题笔试题(三)

1、C#中 property 与 attribute的区别&#xff0c;他们各有什么用处&#xff0c;这种机制的好处在哪里&#xff1f; property和attribute汉语都称之为属性。不过property是指类向外提供的数据区域。而attribute则是描述对象在编译时或运行时属性的。这两者是有本质区别的。 2…

ClassLoader 必知重点题目解析

问&#xff1a;简单说说你对 ClassLoader 的理解&#xff1f; 答&#xff1a;ClassLoader 的作用是根据一个指定的类名称找到或者生成其对应的字节代码&#xff0c;然后把字节码转换成一个 Java 类&#xff08;即 java.lang.Class 实例&#xff09;&#xff0c;除此之外还负责…