习惯了C#的List集合,对于Javascript没有list 极为不舒服,在一个利用Js读取XML文件的Demo中,决定自己构建List对象,将数据存入List.

第一步,Js读取XML文件知识

XML:可扩展标记语言,常用于互联网数据传输.利用JS读取XML的文章有非常多,这里不一一介绍,本文主要采用Jquery 读取Xml文件.(参考 https://www.cnblogs.com/huacw/archive/2011/03/24/1994074.html).读取文件需要注意浏览器兼容问题,利用谷歌浏览器读取文件需要设置允许访问本地文件.火狐与Edge,IE浏览器均能读取本地文件.

第二步: 分析XML结构

本文以商品结构为例,XML文件结果如下图所示.XML 根节点为CATALOG,子节点为FurnitureType(家具类型),家具类型子节点为Goods

第二步: 构建Goods对象,List对象

Goods

//产品类
function Goods(){ this.type = type;
this.product = product;
this.brand = brand;
this.price=price;
this.productDetails=productDetails;
this.materies=materies;
this.care=care;
this.pictures=pictures; } function type(type){
return type;
}
function product(product)
{
return product;
}
function brand(brand){
return brand;
}
function price(price)
{
return price;
}
function productDetails(details){
return details;
}
function materies(meteriesArray){
return meteriesArray;
}
function care(care){
return care;
}
function pictures(pictureArray){
return pictureArray;
}

  List对象

/*
* List 大小可变数组
*/
function List() {
this.List = new Array();
}; /**
* 将指定的元素添加到此列表的尾部。
* @param object 指定的元素
*/
List.prototype.add = function(object) {
//this.List[this.List.length] = object;
this.List.push(object);
}; /**
* 将List添加到此列表的尾部。
* @param Listgoods 一个列表
*/
List.prototype.addAll = function(Listgoods) {
this.List = this.List.concat(Listgoods.List);
}; /**
* 返回此列表中指定位置上的元素。
* @param index 指定位置
* @return 此位置的元素
*/
List.prototype.get = function(index) {
return this.List[index];
}; /**
* 获取元素在数组中的坐标,不存在则返回-1
* @return true or false
*/
List.prototype.getdataIndex = function(object) {
var i = 0;
for(; i < this.List.length; i++) {
if( this.List[i] === object) {
return i;
}
}
return -1;
}; /**
* 移除此列表中指定位置上的元素。
* @param index 指定位置
* @return 此位置的元素
*/
List.prototype.removeIndex = function(index) {
var object = this.List[index];
this.List.splice(index, 1);
return object;
}; /**
* 移除此列表中指定元素。
* @param object 指定元素
* @return 此位置的元素
*/
List.prototype.remove = function(object) {
var i = this.getdataIndex(object); if(i==-1) {
return null;
} else {
return this.removeIndex(i);
}
}; /**
* 移除此列表中的所有元素。
*/
List.prototype.clear = function() {
this.List.splice(0, this.List.length);
}; /**
* 返回此列表中的元素数。
* @return 元素数量
*/
List.prototype.size = function() {
return this.List.length;
}; /**
* 返回列表中指定的 start(包括)和 end(不包括)之间列表。
* @param start 开始位置
* @param end 结束位置
* @return 新的列表
*/
List.prototype.subList = function(start, end) {
var List = new List();
List.List = this.List.slice(start, end);
return List;
}; /**
* 如果列表不包含元素,则返回 true。
* @return true or false
*/
List.prototype.isEmpty = function() {
return this.List.length == 0;
};
/**
* 根据价格对商品列表进行排序。
* @return 排序后列表
*/
List.prototype.SortByPrice=function(){
var length= this.List.length;
for(var j=0;j< length-1;j++){
//两两比较,如果前一个比后一个大,则交换位置。
for(var i=0;i<length-1-j;i++){
if(this.List[i].price>this.List[i+1].price){
var temp = this.List[i];
this.List[i] = this.List[i+1];
this.List[i+1] = temp;
}
}
} }
/**
*
* @param type 数据类型
* @return 排序后列表
*/
List.prototype.GetDataByType=function(type){
var NewList = new List();
for(var i=0;i<this.List.length;i++){
var object=this.List[i] ;
if(object.type==type){
NewList.add(object)
}
}
return NewList;
} /**
*
* @param type 数据类型
* @return 数据类型的 品牌列表
*/
List.prototype.GetBrandsByType=function(type){
var dataList =this.GetDataByType(type);
var brandList=new List();
for(var i=0;i<dataList.List.length;i++){
var brand=dataList.List[i].brand;
if(brandList.getdataIndex(brand)==-1){
brandList.add(brand);
}
}
return brandList;
}

  

  第三步;读取文件

本文利用Jquery读取XML文件,需导入Jquery.读取部分代码:

var AllGoodsList = new List();//所有数据

//读取文件 获取数据
function GetXml() {
$.ajax({
url: 'file/data.xml',
dataType: 'xml',
success: function (data) {
//获取xml数据
isLoadDataOK= GetData(data); }
}); }
//读取xml数据存入list集合
function GetData(data) {
var nowGoodsType;
$(data).find("Type").each(function (i, Type) {
var type=$(this).attr("name");
if(type=="Categories"){
$(Type).find("GoodsType").each(function (i, GoodsType) {
nowGoodsType = $(this).attr("name");
$(GoodsType).find("Goods").each(function (j) { var base = $(this).children("Base");
var product = base.children("Product").text();
var brand = base.children("Brand").text();
var price = base.children("Price").text();
var productDetails = $(this).children("ProductDetails").text();
var material = new Array();
var materials = $(this).children("Material");
var materialnodes = materials.children("item");
for (var i = 0; i < materialnodes.length; i++) {
var item = materialnodes[i];
var itemvalue = item.textContent;
material.push(itemvalue)
}
var care = $(this).children("Care").text();
var pictures = new Array();
var pictures = $(this).children("Picture");
var picturenodes = pictures.children("item")
for (var i = 0; i < picturenodes.length; i++) {
var item = picturenodes[i];
var itemvalue = item.textContent;
pictures.push(itemvalue)
}
var goods = new Goods();
goods.type = nowGoodsType;
goods.product = product;
goods.brand = brand;
goods.price = price;
goods.productDetails = productDetails;
goods.materies = material;
goods.care = care;
goods.pictures = pictures;
var p1=price.replace("A","");
var p2=p1.replace("U","");
var p3=p2.replace("$","");
goods.thePrice=p3;
AllGoodsList.add(goods); })
}) } }
)
}

 第四步 启动测试:

启动火狐浏览器,读取文件后,调试查看数据.结果如下.表明数据已经完全读取成功.

Js读取XML文件为List结构的更多相关文章

  1. IE下JS读取xml文件示例代码

    JS读取xml文件具体步骤为:创建DOM对象.加载xml文件(仅适用于IE)附示例代码,感兴趣的朋友可以参考下,希望对大家有所帮助使用javascript脚本读取xml文件,这里暂只考虑IE浏览器st ...

  2. jQuery、JS读取xml文件里的内容(JS先通过document.implementation.createDocument方法将xml转换成document对象,jQuery将读取到的xml转成table)

    xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...

  3. js 读取xml文件

    读取xml文件 [原创 2007-6-20 17:35:37]     字号:大 中 小 js中读取xml文件,简单的例子: <html><head><script> ...

  4. JS读取XML文件数据并以table显示数据(兼容IE火狐)

    先看xml文件: <?xml version="1.0" standalone="yes"?> <student> <stuinf ...

  5. js读取xml文件

    假设我们现在要读取下面的 info.xml 文件 <?xml version="1.0" encoding="gb2312"?> <root& ...

  6. [HTML]js读取XML文件并解析

    xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...

  7. 【JavaScript】JS读取XML文件并进行搜索

    需求效果 点击链接.当前页面载入xml文件并展示相应内容 通过搜索框.搜索xml文件内节点数据.展示包括内容的节点数据 功能实现 Demo终于实现效果 http://loadxmldemo.coder ...

  8. js操作XML文件兼容IE与FireFox

    最近项目中用到了xml,需求是用户安装产品时先把一系列的数据保存到xml文件中,当执行到最后一步时才写入数据库,这样最大限度的减少了数据库的访问,于是不得不纠结在各浏览器的兼容性的问题(悲哀啊.... ...

  9. 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂

    浅谈JS中的!=.== .!==.===的用法和区别   var num = 1;     var str = '1';     var test = 1;     test == num  //tr ...

随机推荐

  1. 大数据【五】Hive(部署;表操作;分区)

    一 概述 就像我们所了解的sql一样,Hive也是一种数据仓库,不同的是hive是在hadoop大数据生态圈中所用.这篇博客我主要介绍Hive的简单表运用. Hive是Hadoop 大数据生态圈中的数 ...

  2. UWP开发细节记录:DirectX::XMMATRIX 的坑

    这两天写的代码概率性的崩溃在 XMMatrixMultiply() 函数,XMMatrixMultiply() 本身是 inline 函数可以看到崩溃处的代码: vX = _mm_mul_ps(vX, ...

  3. python 多进程、多线程

    1.多线程: 下面讲一个简单用法,这个模块比较简单,但是实际使用中会遇到很多坑 from multiprocessing import process def go(s): print "主 ...

  4. 【python】python常用函数

    urlencode与urldecode 当url中包含中文或者参数包含中文,需要对中文或者特殊字符(/.&)做编码转换. urlencode的本质:把字符串转为gbk编码,再把\x替换成%.如 ...

  5. 字节顺序标记BOM

    最近,从numbers导出的csv文件,导入excel后,出现中文乱码问题.网上查询后,发现是numbers导出的csv默认是utf-8无BOM的,使用sublimText3打开,另存为utf-8wi ...

  6. SQL Server 2016 中有外键的表无法被Truncate,只能被Delete

    问: I get the following message even when the table that references it is empty: "Cannot truncat ...

  7. bufferIO,Direct io,mmap, ZeroCopy

    1 bufferIO(传统IO),Direct io(干掉内核cache),mmap(大数据映射),zeroCopy(网络IO) 2 linux 5种IO 3NIO 相关知识 这张图展示了mmap() ...

  8. EntityFramework Code-First 简易教程(二)-------Code First约定

    Code First 约定 在前一篇中,我们已经知道了EF Code-First怎样从模型类(domain classes)中创建数据库表,下面,我们开始学习默认的Code-First约定. 什么是约 ...

  9. ArcGIS pro2.3中添加天地图底图

    应用背景: 很多时候,我们需要使用网络上的遥感影像或者百度地图.天地图等在线地图做一些矢量化工作或者其他. 笔者见过很多人都是把百度地图截图,然后把图片导如Arcmap或者Arcgis pro中,然后 ...

  10. 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇

    第三方登录平台接入 (QQ\微信登录) QQ登录接入 第一步成为QQ应用开发者,审核期限七天 一.所需材料 1.公司注册相关信息 2.营业执照扫描件 微信登录接入 第一步成为微信开发平台开发者,认证费 ...