XML格式化:
String.prototype.removeLineEnd = function() { return this.replace(/(<.+?\s+?)(?:\n\s*?(.+?=".*?"))/g, '$1 $2') } function formatXml(text) { //去掉多余的空格 text = '\n' + text.replace(/(<\w+)(\s.*?>)/g, function($0, name, props) { return name + ' ' + props.replace(/\s+(\w+=)/g, " $1"); }).replace(/>\s*?</g, ">\n<"); //把注释编码 text = text.replace(/\n/g, '\r').replace(/<!--(.+?)-->/g, function($0, text) { var ret = '<!--' + escape(text) + '-->'; //alert(ret); return ret; }).replace(/\r/g, '\n'); //调整格式 var rgx = /\n(<(([^\?]).+?)(?:\s|\s*?>|\s*?(\/)>)(?:.*?(?:(?:(\/)>)|(?:<(\/)\2>)))?)/mg; var nodeStack = []; var output = text.replace(rgx, function($0, all, name, isBegin, isCloseFull1, isCloseFull2, isFull1, isFull2) { var isClosed = (isCloseFull1 == '/') || (isCloseFull2 == '/') || (isFull1 == '/') || (isFull2 == '/'); //alert([all,isClosed].join('=')); var prefix = ''; if (isBegin == '!') { prefix = getPrefix(nodeStack.length); } else { if (isBegin != '/') { prefix = getPrefix(nodeStack.length); if (!isClosed) { nodeStack.push(name); } } else { nodeStack.pop(); prefix = getPrefix(nodeStack.length); } } var ret = '\n' + prefix + all; return ret; }); var prefixSpace = -1; var outputText = output.substring(1); //alert(outputText); //把注释还原并解码,调格式 outputText = outputText.replace(/\n/g, '\r').replace( /(\s*)<!--(.+?)-->/g, function($0, prefix, text) { //alert(['[',prefix,']=',prefix.length].join('')); if (prefix.charAt(0) == '\r') prefix = prefix.substring(1); text = unescape(text).replace(/\r/g, '\n'); var ret = '\n' + prefix + '<!--' + text.replace(/^\s*/mg, prefix) + '-->'; //alert(ret); return ret; }); return outputText.replace(/\s+$/g, '').replace(/\r/g, '\r\n'); } function getPrefix(prefixIndex) { var span = ' '; var output = []; for ( var i = 0; i < prefixIndex; ++i) { output.push(span); } return output.join(''); } function btnFormat_click() { var $ = document.getElementById; $('output').value = formatXml($('input').value); }
使用:
function showInputLog(obj) { var log = $(obj).parent().find("#input").html(); /*log = '<xmp><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" '; log += 'xmlns:web="http://WebXml.com.cn/">'; log += ' <soapenv:Header/>'; log += ' <soapenv:Body>'; log += ' <web:getEnCnTwoWayTranslator>'; log += ' <!--Optional:-->'; log += ' <web:Word>HELLO</web:Word>'; log += ' </web:getEnCnTwoWayTranslator>'; log += ' </soapenv:Body>'; log += '</soapenv:Envelope></xmp>';*/ var s = formatXml(log); $('#show_div_log').html("<xmp>"+s+"</xmp>"); $('#win').window('open'); }
解析XML文本:
loadXML = function(xmlString){ var xmlDoc=null; //判断浏览器的类型 //支持IE浏览器 if(!window.DOMParser && window.ActiveXObject){ //window.DOMParser 判断是否是非ie浏览器 var xmlDomVersions = ['MSXML.2.DOMDocument.6.0','MSXML.2.DOMDocument.3.0','Microsoft.XMLDOM']; for(var i=0;i<xmlDomVersions.length;i++){ try{ xmlDoc = new ActiveXObject(xmlDomVersions[i]); xmlDoc.async = false; xmlDoc.loadXML(xmlString); //loadXML方法载入xml字符串 break; }catch(e){ } } } //支持Mozilla浏览器 else if(window.DOMParser && document.implementation && document.implementation.createDocument){ try{ /* DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。 * 要使用 DOMParser,使用不带参数的构造函数来实例化它,然后调用其 parseFromString() 方法 * parseFromString(text, contentType) 参数text:要解析的 XML 标记 参数contentType文本的内容类型 * 可能是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一个。注意,不支持 "text/html"。 */ domParser = new DOMParser(); xmlDoc = domParser.parseFromString(xmlString, 'text/xml'); }catch(e){ } } else{ return null; } return xmlDoc; }
使用:
var xmlDoc = loadXML(requestXml); var root = xmlDoc.documentElement;
解析文本后:
buildElementDataMap(root); var TEXT_TYPE = "3"; var elementObj = new Object(); //存取XML中解析到的所有值 var editObj = new Object(); //设置编辑值,将XML中获取到的新值赋值给对应的可编辑框 var paraLenObj = new Object(); //记录各参数个数,给多个Item的属性赋值 var xmlCltLenObj = new Object(); //记录Collection或Entity个数,方便解析XML后请求树中添加删除Item /** * 获取Request XML中最新的值 * 获取后返回请求界面可同步 * @param parent */ function buildElementDataMap(parent){ var elements = parent.childNodes; if(elements && checkHasChildren(elements) > 0){ calculateXmlCltLen(parent); for(var i = 0 ; i< elements.length; i++){ var tmp = elements[i]; var nodeType = tmp.nodeType; var nodeName = tmp.localName; if(nodeType == TEXT_TYPE) continue; //文本节点 buildElementDataMap(tmp); } }else{ var nodeType = parent.nodeType; if(nodeType != TEXT_TYPE){ var nodeName = parent.nodeName; var nodeValue; if(document.all){ nodeValue = parent.text; }else{ nodeValue = parent.textContent; } if(nodeName.startsWith("msg") || nodeName.startsWith("esb")) nodeName = nodeName.substring(4); if(nodeValue.trim() != ""){ markupElementObj(nodeName,nodeValue); } } } } /** * 解析XML,组装请求树中参数值的数据源 * @param nodeName * @param nodeValue */ function markupElementObj(nodeName,nodeValue){ var tmp = elementObj[nodeName]; if(tmp == '' || typeof tmp == 'undefined'){ //各参数第一次进入 elementObj[nodeName] = nodeValue; }else{ if(tmp instanceof Array){ //第N次进入,即第N个Item tmp[tmp.length] = nodeValue; elementObj[nodeName] = tmp; }else{ //第二次进入 var tmpArr = []; tmpArr[tmpArr.length] = tmp; tmpArr[tmpArr.length] = nodeValue; elementObj[nodeName] = tmpArr; } } } function checkHasChildren(elements){ var isHas = false; for(var i = 0 ; i< elements.length; i++){ var tmp = elements[i]; var nodeType = tmp.nodeType; if(nodeType != "3"){ //文本节点 isHas = true; break; } } return isHas; }
JS解析XML文件和XML字符串
http://www.cnblogs.com/chjw8016/archive/2011/07/12/2104269.html
JS代码在附件。
相关推荐
这些文件通常包含了处理XML数据的相关工具方法,可能包括读取XML文件、解析XML字符串、格式化XML以及生成新的XML文件等操作。 `XMLFileUtil.java`可能包含了一些与XML文件I/O相关的功能,比如读取XML文件到字符串,...
6. **序列化与反序列化**:TinyXML2可以方便地将C++对象序列化为XML格式,并从XML反序列化回对象。只需定义好对象的读写函数,就能实现对象与XML之间的转换。 7. **效率优化**:TinyXML2的设计注重效率,解析速度快...
传入一个指向`XML_PARSER_STRUCT`结构体的指针,该函数会初始化这个结构体,准备进行XML解析。 2. **关闭解析器**: - `xml_close_parser` 用于释放解析器占用的资源。当解析完成或不再需要解析器时,调用此函数以...
XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准格式。在MFC应用中,我们可以利用XML文件来持久化控件的状态,如EDIT控件的文本、LISTCTRL控件的选中项、BUTTON控件的按下状态等。 接下来...
在JavaScript中,处理XML数据时,我们经常需要将XML字符串格式化并高亮显示,以增强可读性。本文将详细介绍如何使用DOMParser解析XML字符串,并递归遍历XML树来实现这一目标。 首先,XML(Extensible Markup ...
MATLAB还提供了一个`xmlwrite`函数,用于将数据写入XML文件,这在你需要保存MATLAB处理后的结果到XML格式时非常有用。 在提供的压缩包文件"xml_toolbox"中,可能包含了一些实用的工具或示例,帮助用户更方便地进行...
TinyXML-2的主要功能就是解析XML文档,将XML结构转换为C++对象,这些对象可以被方便地遍历和修改,然后再将结果序列化回XML格式。 1. **基本用法**: - 解析XML文档:使用`XMLDocument`类加载XML文件或XML字符串,...
在Qt框架中,XML文件是一种常见的数据存储格式,它提供了结构化的数据表示方式,便于程序读取和写入。QTreeWidget是Qt提供的一种用于显示树状结构数据的控件,它可以很好地展示XML文件的层次结构。QXml是Qt中的XML...
首先,libxml2库提供了多种API接口,包括解析XML文档、创建XML结构、序列化XML结构以及XPath查询等功能。在解析XML文档时,我们通常会使用`xmlReadFile()`或`xmlReadMemory()`函数,它们可以读取文件或内存中的XML...
XML(eXtensible Markup Language)是一种结构化数据格式,常用于存储和传输数据。 XML文档由一系列元素组成,每个元素都有可能包含其他元素、文本内容或属性。QT中的QDomDocument类用于表示整个XML文档,它可以...
在Java编程语言中,XML(eXtensible Markup Language)是一种常见的数据交换格式,用于存储和传输结构化数据。而JSON(JavaScript Object Notation)则是另一种轻量级的数据交换格式,因其简洁和易于读写而广泛使用...
在解析过程中,每当遇到XML文档的开始标签、结束标签或文本内容等特定事件时,都会触发相应的事件处理函数。这种方式非常适合于流式处理和实时分析,因为它不会将整个文档加载到内存中。 **特点:** - **优点:** ...
XML(eXtensible Markup Language)是一种用于存储和交换结构化数据的标准格式,广泛应用于软件开发、网络通信和数据存储等领域。在C语言环境中,处理XML文件时,通常有两种主要的解析模式:DOM(Document Object ...
1. **xmlReadFile()**:这个函数用于从磁盘或网络读取XML文件,并将其转换为一个XML解析树。例如: ```c xmlDocPtr doc = xmlReadFile("example.xml", "UTF-8", XML_PARSE_RECOVER); ``` 这里,`xmlReadFile()`...
XML(Extensible Markup Language)是一种标记语言,广泛用于数据交换和结构化数据存储。为了在C语言环境中方便地操作XML文件,我们可以利用libxml2库,这是一个功能强大且高效的开源库,提供了XML的解析、创建、...
在Android开发中,XML(eXtensible Markup Language)是一种常用的数据交换格式,它用于存储结构化数据。本文将深入探讨Android平台下解析XML的三种主要方法:SAX(Simple API for XML)、DOM(Document Object ...
XML是一种常用的数据交换格式,用于存储和传输结构化数据。下面我们将详细探讨如何实现这个过程。 首先,我们需要理解XML的基本结构。XML文档由元素、属性、文本内容等组成,通过层次结构表示数据。在C#中,我们...
首先,实例化`DOMDocument`对象,然后使用`createElement`方法创建元素节点,`nodeValue`设置文本内容,最后用`saveXML`方法将整个文档转换为字符串。 ```php $doc = new DOMDocument('1.0', 'UTF-8'); $root = ...