`
logicigam
  • 浏览: 33116 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在Javascript中解析内存中的xml字符串并转换为JSON

阅读更多

由于一些不可抗力因素导致我需要将一个从js函数中返回的字符串变量(内容为xml)转换为IXMLDOMDocument2,进而转换为json,需要能跨浏览器,网上搜了很多种方法,加载xml的时候都必须用ajax加载外部文件中的xml,浪了半天,终于结果了:

==========

//解析xml字符串变量为IXMLDOMDocument2

  function parseXML(data){
   var xml,tmp;
   if ( window.DOMParser ) { // Standard
    tmp = new DOMParser();
    xml = tmp.parseFromString( data , "text/xml" );
   } else { // IE
    xml = new ActiveXObject( "Microsoft.XMLDOM" );
    xml.async = "false";
    xml.loadXML( data );
   }

   tmp = xml.documentElement;

   if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
        return null;
   }

   return xml;
  }

 将IXMLDOMDocument2转换为JSON,参数为IXMLDOMDocument2对象

function toJson (obj){
if (this==null) return null;
var retObj = new Object;
buildObjectNode(retObj,/*jQuery*/obj);
return retObj;
function buildObjectNode(cycleOBJ,/*Element*/elNode){
/*NamedNodeMap*/
var nodeAttr=elNode.attributes;
if(nodeAttr != null){
if (nodeAttr.length&&cycleOBJ==null) cycleOBJ=new Object; 
for(var i=0;i<nodeAttr.length;i++){
cycleOBJ[nodeAttr[i].name]=nodeAttr[i].value;
}
}
var nodeText="text";
if (elNode.text==null) nodeText="textContent";
/*NodeList*/
var nodeChilds=elNode.childNodes;
if(nodeChilds!=null){
if (nodeChilds.length&&cycleOBJ==null) cycleOBJ=new Object; 
for(var i=0;i<nodeChilds.length;i++){
if (nodeChilds[i].tagName!=null){
if (nodeChilds[i].childNodes[0]!=null&&nodeChilds[i].childNodes.length<=1&&(nodeChilds[i].childNodes[0].nodeType==3||nodeChilds[i].childNodes[0].nodeType==4)){
if (cycleOBJ[nodeChilds[i].tagName]==null){
cycleOBJ[nodeChilds[i].tagName]=nodeChilds[i][nodeText];
}else{
if (typeof(cycleOBJ[nodeChilds[i].tagName])=="object"&&cycleOBJ[nodeChilds[i].tagName].length){
cycleOBJ[nodeChilds[i].tagName][cycleOBJ[nodeChilds[i].tagName].length]=nodeChilds[i][nodeText];
}else{
cycleOBJ[nodeChilds[i].tagName]=[cycleOBJ[nodeChilds[i].tagName]];
cycleOBJ[nodeChilds[i].tagName][1]=nodeChilds[i][nodeText];
}
}
}else{
if (nodeChilds[i].childNodes.length){
if (cycleOBJ[nodeChilds[i].tagName]==null){
cycleOBJ[nodeChilds[i].tagName]=new Object;
buildObjectNode(cycleOBJ[nodeChilds[i].tagName],nodeChilds[i]);
}else{
if (cycleOBJ[nodeChilds[i].tagName].length){
cycleOBJ[nodeChilds[i].tagName][cycleOBJ[nodeChilds[i].tagName].length]=new Object;
buildObjectNode(cycleOBJ[nodeChilds[i].tagName][cycleOBJ[nodeChilds[i].tagName].length-1],nodeChilds[i]);
}else{
cycleOBJ[nodeChilds[i].tagName]=[cycleOBJ[nodeChilds[i].tagName]];
cycleOBJ[nodeChilds[i].tagName][1]=new Object;
buildObjectNode(cycleOBJ[nodeChilds[i].tagName][1],nodeChilds[i]);
}
}
}else{
cycleOBJ[nodeChilds[i].tagName]=nodeChilds[i][nodeText];
}
}
}
}
}
}
}

 

分享到:
评论

相关推荐

    将string类型xml字符串转为json字符串

    总结来说,将string类型的XML字符串转换为JSON字符串是通过解析XML字符串并构建相应的JSON对象来完成的。这个过程通常需要借助特定的库,如Java中的`org.json`。理解XML和JSON的结构差异,以及如何利用这些库进行...

    java中解析json字符串

    本文将深入探讨如何在Java中解析JSON字符串,以满足后端处理前端传递的数据需求。 首先,理解JSON的基本结构至关重要。JSON格式通常包含键值对,可以是对象(用花括号 `{}` 包裹)或数组(用方括号 `[]` 包裹)。...

    解析Json字符串直接转换为对象(包括多层List集合 嵌套)所用jar包

    在Java编程中,JSON...总之,Java中的Jackson库提供了一种高效且灵活的方式来解析JSON字符串,将其转换为对应的Java对象。无论是简单的键值对还是复杂的嵌套结构,Jackson都能够胜任,极大地简化了开发人员的工作。

    js的XML解析器 可以解析XMl文件和XML字符串

    JavaScript中的XML解析器是用于处理XML数据的关键工具,它允许开发者在浏览器环境中解析XML文档或者XML字符串,从而在Web应用中有效地使用这些数据。XML(eXtensible Markup Language)是一种结构化数据语言,常用于...

    C语言实现的 json格式字符串与结构体自动相互转化

    将JSON字符串转化为结构体,意味着解析JSON文本并将其内容映射到预先定义的C语言结构体中;反之,将结构体转化为JSON字符串则是将结构体中的数据转换为JSON格式的文本,便于在网络间传递或存储。 关于“反射”这一...

    kettle解析json串

    根据提供的信息,我们可以深入探讨如何在Kettle中解析JSON串,并连接数据库进行数据处理。本文将详细介绍使用Java库解析JSON的基本方法以及如何在Kettle环境中实现这一过程。 ### Kettle与JSON解析概述 #### 1. **...

    json字符串转化为list泛型

    在Java编程中,我们经常需要将JSON格式的数据转换为Java对象,这通常涉及到将JSON字符串转化为List泛型。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...

    java对象转换为json字符串或字符串数组

    在Java开发中,将Java对象转换为JSON字符串或字符串数组是一项常见的任务,特别是在与前端交互、数据存储或者网络传输时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...

    VB解析Json转换为Xml

    2. 创建JavaScriptSerializer对象,并使用它来反序列化Json字符串: ```vb Dim jsonSerializer As New JavaScriptSerializer() Dim jsonData As String = "{""key"":""value""}" ' 示例Json字符串 Dim ...

    asp字符串转json对象类

    本知识点主要关注如何将ASP中的字符串转换为JSON对象,特别地,这个过程是通过原生的VBScript(Visual Basic Script)实现的,而不是依赖于第三方库。 首先,我们需要理解VBScript中的JSON解析概念。由于ASP.NET...

    json字符串解析工具

    3. **转换**:它可以将JSON字符串转换为Java对象,这对于开发人员在Java应用中处理JSON数据非常有用。通过这个工具,开发者可以快速地将JSON数据映射到Java类的实例。 4. **操作**:可能支持对JSON对象进行操作,如...

    xmljson解析客户端

    1. 解析XML:使用XML解析器(如Java的DOM解析器,Python的ElementTree等)将XML字符串转换为DOM树或类似的结构。 2. 转换结构:遍历DOM树,将元素和属性映射到JSON键值对。 3. 序列化JSON:将转换后的结构转换为JSON...

    json字符串转换插件

    在Java中,我们通常需要将这样的JSON字符串转换为Java对象,或者将Java对象转换为JSON字符串,以便于数据的序列化和反序列化。 以Gson库为例,它是Google提供的一个强大的JSON处理库。要在项目中使用Gson,首先需要...

    C#json与Xml相互转换例子

    // 将XML字符串转换为XDocument XDocument xmlDocument = XDocument.Parse(xmlString); // 创建一个自定义的转换器,因为System.Text.Json不支持直接从XDocument序列化 var converter = new ...

    jQuery xml-to-json xml转JSON插件

    接着,可以调用插件提供的函数,传入XML字符串或DOM对象,即可得到JSON对象。插件可能还提供了一些自定义选项,例如设置是否展开嵌套的XML节点,或者指定某些节点的转换规则。 例如,假设我们有一个XML文件,内容...

    Xml2Json and Json2Xml

    在JavaScript中,我们可以使用内置的DOM解析器处理XML,如`new DOMParser()`来解析XML字符串为Document对象,然后使用`XMLSerializer`序列化回XML字符串。JSON则可以通过`JSON.parse()`解析JSON字符串为JavaScript...

    js下xml转json和json转xml

    相反,将JSON转换为XML时,我们需要将JSON对象构建成XML字符串。步骤如下: 1. **初始化XML字符串**:开始时创建一个空的XML字符串。 2. **递归转换JSON**:从JSON根对象开始,递归地将每个键值对转换成XML元素。 ...

    XML、JAVA、JSON多种方式互相转换

    - Jackson库同样提供了反向转换功能,使用`writeValueAsString`方法将JSON对象转换成XML字符串。 - 使用JsonXML Java库:这个库专门用于JSON到XML的转换,提供了简单易用的API。 - Google的Gson库可以通过第三方...

    java的xml和json相互转换工具类,亲测直接用

    上述代码中,`xmlToJson`方法接收一个XML字符串,通过`XmlMapper`的`readTree`方法将其解析为JsonNode对象,然后利用`writeValueAsString`方法将JsonNode转换为JSON字符串。相反,`jsonToXml`方法则将JSON字符串解析...

    json 解析 xml

    在Android中,JSON解析主要分为两个过程:解析(将JSON字符串转化为Java对象)和序列化(将Java对象转化为JSON字符串)。 1. **解析JSON** - `org.json`库:Android SDK内置了`org.json`库,提供了`JSONObject`和`...

Global site tag (gtag.js) - Google Analytics