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

时间: 2024-08-22 16:47:50

xml字符串转xml对象,xml对象转json对象的相关文章

JS解析xml字符串,并把xml展示在HTML页面上

首先,要写一个方法,把xml字符串转化成dom对象 //将字符串转化成dom对象;string转换为xml function stringToXml(xmlString) { var xmlDoc; if (typeof xmlString == "string") { //FF if (document.implementation.createDocument) { var parser = new DOMParser(); xmlDoc = parser.parseFromStr

使用Gson将对象类转成Json对象时出现\u003d的问题

Gson将对象转成Json对象的方法 Gson gson=new Gson(); String json=gson.toJson(Student.class); 这种情况,如果Student属性中的某个值包含有=,会变为\u003d的 只需将Gson的初始化修改为 Gson gson = new GsonBuilder().disableHtmlEscaping().create();

使用dom4j生成xml字符串,以及解析xml字符串

基于dom4j-1.6.1.jar import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Le

解析xml字符串出现java.net.MalformedURLException: no protocol的解决办法

使用jdom解析xml字符串代码如下 String xml = "<root>......</root>"; SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(xml); 运行时,抛异常java.net.MalformedURLException: no protocol...... 解决办法如下: String xml="<root>......<

JavaScript之Ajax-4 XML解析(JavaScript中的XML、Ajax返回并解析XML)

一.JavaScript中的XML XML DOM对象 - IE 浏览器通过 ActiveXObject 对象得到 XML DOM 对象 - 其他浏览器通过 DOMParser 对象得到 XML DOM 对象 XML DOM对象的支持 - XML DOM(XML Document Object Model)定义了访问和操作XML文档的标准方法 - DOM 把 XML 文档作为树结构来查看.能够通过DOM树来访问所有元素 加载并解析XML字符串 二.Ajax返回并解析XML 使用XHR发送XML字

[转载]将json字符串转换成json对象

例如: JSON字符串: var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象: var str2 = { "name": "cxh", "sex": "man" }; 一.JSON字符串转换为JSON对象 要使用上面的str1,必须使用下面的方法先转化为JSON对象: //由JSON字符串转换为

json对象和json字符串转换方法

在WEB数据传输过程中,json是以文本,即字符串的轻量级形式传递的,而客户端一般用JS操作的是接收到的JSON对象,所以,JSON对象和JSON字符串之间的相互转换.JSON数据的解析是关键. 先明确2个概念例如: JSON字符串: var str1 = '{ "name": "deyuyi", "sex": "man" }'; JSON对象: var str2 = { "name": "del

json对象和json字符串有啥区别啊

json对象可以通过javascript存取属性!json对象装成json字符串经常用于前后台传输数据! 如果你在前台使用,那么Json对象可以通过xx.name来调用,如果是字符串,那么就是字符串了 ajax中,我们自己拼接的是一个JSON对象,以为它是无数据类型的,所以JS根据其格式默认其实对象, 你要是往后台发,要先把它装换成JSON字符. 从ajax的服务器发过的,一定是字符串,你想要把它解析,很简单,把它先变成JSON对象才行. 太厉害了. 在数据传输过程中,json是以文本,即字符串

js 将json字符串转换为json对象的方法解析(转)

js 将json字符串转换为json对象的方法解析 将json字符串转换为json对象的方法.在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 例如: JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象:var str2 = { "name": &

Json对象与Json字符串的转化、JSON字符串与Java对象的转换

Json对象与Json字符串的转化.JSON字符串与Java对象的转换 一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2.浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器: JSON.stringify(obj)将JSON转为字符串.JSON.parse(string)