xml字符串转xml对象,xml对象转json对象
xml字符串转xml对象:
function loadXml(str) {
if (str == null) {
return null;
}
var doc = str;
try{
doc = createXMLDOM();
doc.async = false;
doc.loadXML(str);
}catch(e){
doc = $.parseXML(str);
}
return doc;
}
/**
*xml对象转json对象
*xmlObj:xml对象
*nodename:节点路径('ROOT/ITEM')
*isarray:true,强制返回数组对象
**/
function xmltojson(xmlObj,nodename,isarray){
var obj=$(xmlObj);
var itemobj={};
var nodenames="";
var getAllAttrs=function(node){//递归解析xml 转换成json对象
var _itemobj={};
var notNull=false;
var nodechilds=node.childNodes;
var childlenght=nodechilds.length;
var _attrs=node.attributes;
var firstnodeName="#text";
try{
firstnodeName=nodechilds[0].nodeName;
}catch(e){}
if((childlenght>0&&firstnodeName!="#text")||_attrs.length>0){
var _childs=nodechilds;
var _childslength=nodechilds.length;
var _fileName_="";
if(undefined!=_attrs){
var _attrslength=_attrs.length;
for(var i=0; i<_attrslength; i++){//解析xml节点属性
var attrname=_attrs[i].nodeName;
var attrvalue=_attrs[i].nodeValue;
_itemobj[attrname]=attrvalue;
}
}
for (var j = 0; j < _childslength; j++) {//解析xml子节点
var _node = _childs[j];
var _fildName = _node.nodeName;
if("#text"==_fildName){break;};
if(_itemobj[_fildName]!=undefined){//如果有重复的节点需要转为数组格式
if(!(_itemobj[_fildName] instanceof Array)){
var a=_itemobj[_fildName];
_itemobj[_fildName]=[a];//如果该节点出现大于一个的情况 把第一个的值存放到数组中
}
}
var _fildValue=getAllAttrs(_node);
try{
_itemobj[_fildName].push(_fildValue);
}catch(e){
_itemobj[_fildName]=_fildValue;
_itemobj["length"]=1;
}
}
}else{
_itemobj=(node.textContent==undefined)?node.text:node.textContent;
}
return _itemobj;
};
if(nodename){
nodenames=nodename.split("/")
}
for(var i=0;i<nodenames.length;i++){
obj=obj.find(nodenames[i]);
}
$(obj).each(function(key,item){
if(itemobj[item.nodeName]!=undefined){
if(!(itemobj[item.nodeName] instanceof Array)){
var a=itemobj[item.nodeName];
itemobj[item.nodeName]=[a];
}
itemobj[item.nodeName].push(getAllAttrs(item));
}else{
if(nodenames.length>0){
itemobj[item.nodeName]=getAllAttrs(item);
}else{
itemobj[item.firstChild.nodeName]=getAllAttrs(item.firstChild);
}
}
});
if(nodenames.length>1){
itemobj=itemobj[nodenames[nodenames.length-1]];
}
if(isarray&&!(itemobj instanceof Array)&&itemobj!=undefined){
itemobj=[itemobj];
}
return itemobj;
};
使用方法:
var xmlstr="<USERS>" +
"<USER state='0'>" +
"<USERNAME type='String'>张三</USERNAME>" +
"<USERID type='String'>00001</USERID>" +
"</USER>" +
"<USER state='1'>" +
"<USERNAME type='String' size='100'>李四</USERNAME>" +
"<USERID>00002</USERID>" +
"</USER>" +
"<USER>" +
"<USERNAME>李四</USERNAME>" +
"<USERID>00002</USERID>" +
"</USER>" +
"</USERS>";
var xmlobj=loadXml(xmlstr);
xmltojson(xmlobj);//返回结果如下
{
"USERS": {
"USER": [
{
"state": "0",
"USERNAME": {
"type": "String"
},
"length": 1,
"USERID": {
"type": "String"
}
},
{
"state": "1",
"USERNAME": {
"type": "String",
"size": "100"
},
"length": 1,
"USERID": "00002"
},
{
"USERNAME": "李四",
"length": 1,
"USERID": "00002"
}
],
"length": 1
}
}
(2)xmltojson(xmlobj,'USERS/USER',true);返回结果如下:
[
{
"state": "0",
"USERNAME": {
"type": "String"
},
"length": 1,
"USERID": {
"type": "String"
}
},
{
"state": "1",
"USERNAME": {
"type": "String",
"size": "100"
},
"length": 1,
"USERID": "00002"
},
{
"USERNAME": "李四",
"length": 1,
"USERID": "00002"
}
]
PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线XML/JSON互相转换工具:
http://tools.jb51.net/code/xmljson
在线格式化XML/在线压缩XML:
http://tools.jb51.net/code/xmlformat
XML在线压缩/格式化工具:
http://tools.jb51.net/code/xml_format_compress
XML代码在线格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat
xml字符串转xml对象,xml对象转json对象的更多相关文章
- JS解析xml字符串,并把xml展示在HTML页面上
首先,要写一个方法,把xml字符串转化成dom对象 //将字符串转化成dom对象;string转换为xml function stringToXml(xmlString) { var xmlDoc; ...
- js 根本没有“JSON对象”这回事! JSON对象——转
前言 写这篇文章的目的是经常看到开发人员说:把字符串转化为JSON对象,把JSON对象转化成字符串等类似的话题,所以把之前收藏的一篇老外的文章整理翻译了一下,供大家讨论,如有错误,请大家指出,多谢. ...
- 使用Gson将对象类转成Json对象时出现\u003d的问题
Gson将对象转成Json对象的方法 Gson gson=new Gson(); String json=gson.toJson(Student.class); 这种情况,如果Student属性中的某 ...
- Java对象或String转JSON对象
Java String转JSON对象 用阿里的fastjson里的一个方法,导入fastjson包JSONObject jsonObject1 =JSONObject.parseObject(Stri ...
- 使用dom4j生成xml字符串,以及解析xml字符串
基于dom4j-1.6.1.jar import java.io.IOException; import java.io.StringWriter; import java.util.ArrayLis ...
- 序列化对象为xml字符串
/// <summary> /// 序列化对象为xml字符串 /// </summary> /// <param name="obj" ...
- .NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表
/// <summary> /// 解析xml字符串 转换为实体类列表数据 /// </summary> /// <param name="xmlStr&quo ...
- 大话Json对象和Json字符串
一.Json对象和Json字符串的区别 (1)Json对象:可以通过javascript存取属性. 先介绍一下json对象,首先说到对象的概念,对象的属性是可以用:对象.属性进行调用的.例如: var ...
- [转载]将json字符串转换成json对象
例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; J ...
- js 将json字符串转换为json对象的方法解析-转
例如: JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }'; JS ...
随机推荐
- Linux中的关机
我是用普通用户登录,在终端下输入shutdown命令,结果显示 command not found.这就奇怪了,难道我的linux不支持这个命令?man了一下shutdown,大篇幅的说明告诉我,我的 ...
- LNMP环境搭建(三:PHP)
1.获取php源码 # cd /usr/local/src/ # wget http://cn2.php.net/get/php-7.0.15.tar.gz/from/this/mirror 2.解压 ...
- 打字母的游戏&Java入门
目标: 在一个窗体上随机掉落字母,通过键盘输入,敲对后消除并且累计积分,否则扣除一定积分. 具体内容: 画一个窗体——>产生随机字母——>接受键盘输入——>显示分数 代码: pack ...
- 【BZOJ1345】[Baltic2007]序列问题Sequence 贪心+单调栈
[BZOJ1345][Baltic2007]序列问题Sequence Description 对于一个给定的序列a1, …, an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和a ...
- WinForm开发----关闭window窗体最好的办法
最近有一人问道,如何切换窗体.一想到这,我就想,不就是new一个form,然后就show么? 可是我发现,当你控制某个属性的时候,不是不能控制,只是很麻烦而已.有没有好的办法?当然有,咋办? 最简单最 ...
- 九度OJ 1186:打印日期 (日期计算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6366 解决:2214 题目描述: 给出年分m和一年中的第n天,算出第n天是几月几号. 输入: 输入包括两个整数y(1<=y<= ...
- 7.FactoryBean 和BeanFactory去区别
FactoryBean源码: /* * Copyright 2002-2012 the original author or authors. * * Licensed under the Apach ...
- php数据类型的true和false
- linux c编程:信号(四) sigaction
signal 函数的使用方法简单,但并不属于 POSIX 标准,在各类 UNIX 平台上的实现不尽相同,因此其用途受到了一定的限制.而 POSIX 标准定义的信号处理接口是 sigaction 函数, ...
- linux -unrar解压缩
解压缩命令unrar的使用: $unrar --help 用法: unrar <command>-<switch 1> -<switchN> <arch ...