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代码在附件。
相关推荐
基于Java的XML解析与反射设计模式 摘要:随着计算机时代的蓬勃发展,internet的普及给社会以及人民的生活带来了巨 大的影响。与此同时,b/s结构的多系统相互访问技术应时代的发展也如雨后春笋般不断 涌现出来,相应...
cmarkup是把整个xml文件作为字符串载入内存,再利用字符串类提供的函数进行访问,MFC环境下是...第二步:xml格式的创建 CMarkup xml; CreateXmlData(xml); void CreateXmlData(CMarkup &xml) { xml.SetDoc(_T(\r\n));
3.5.6 为调试格式化 78 3.6 其他字符处理相关的包 80 3.6.1 strings包 81 3.6.2 strconv包 86 3.6.3 utf8包 90 3.6.4 unicode包 91 3.6.5 regexp包 92 3.7 例子:m3u2pls 101 3.8 练习 106 第4章...
三、学习微软 EXCEL 2002 VBA 编程和XML,ASP技术 22 第一章 电子表格自动化简介和了解宏命令 22 1了解宏 22 2宏命令的普通应用 22 3写宏之前的计划 23 4录制宏 24 5运行宏 26 6修改宏代码 26 7添加注释 29 8分析宏...
1.JSTL(JSP Standard Tag Library)是一套预先定义好、协助程序员简化JSP网页制作的标签函数库。规格包含各种网页运作所需的运用,如循环、流程控制、输入输出、文本格式化,甚至XML文件处理及数据库访问操作等;
07 format字符串格式化 08 数学意义的函数与python中的函数 09 为何要有函数 10 函数返回值 11 可变长参数 第15章 01 上节课复习 02 全局变量与局部变量 03 风湿理论之函数即变量 04 函数递归 05 函数递归补充 第...
formatter 该属性定义了 Member.getCaption() 方法返回的动作值,这里需要是一个实现了 mondrian.olap.MemberFormatter 接口的类,用来对 Caption 地值进行格式化。 3.6. Join 对于一个 Hierarchy 来说,有两种...
常见的非结构化数据包括XML、文本、图象、声音、影音、各类应用软件 产生的文件。 针对包含文字、数据的为结构化数据应当先利用数据清洗、数据治理工具进行 提取,这项工作目前仍依赖技术员进行操作,由于格式的复杂...
子程序 到短路径, 文本型, 公开, 取指定路径的短路径名(返回收缩后的路径,无效返回空文本)如: c:\program files\ 收缩后为:C:\PROGRA~1\ .参数 文件名, 文本型, , 原路径 .子程序 到任意进制, 文本型, 公开, 可以将...
5 3.9 函数(Function)的命名规则 5 3.10 索引(Index) 命名规范 5 3.11 约束(Constraint) 命名规范 5 4 数据模型产出物规范 5 附录A:xml文件使用说明 7 附录B:保留关键字 8 编写目的 本文的目的是提出针对Oracle...
13、支持代码缩进以及自动格式化等; 14、支持代码自动完成; 15、支持编译java程序,可以快速定位错误所在位置; 16、支持通用的编辑功能,如剪切、拷贝、粘贴等; 17、支持书签功能; 18、编辑区支持多种选择...
DSkinLite界面库采用XML管理GDI元素,并独创了将界面元素抽象为图片,矩形,线条,文字等元素。任何 一个控件界面均可以由这些元素来组合,使用DSkinLite可以轻松配置各种界面效果。如下图所示: 由此在一个控件...
10 优化表格计算、域计算、数值格式化效率; 11 优化文字工具操作效率; 12 优化WPS文字查找、替换效率; 13 优化以html格式进行复制粘贴的显示效果。 WPS表格: 1 改进无法按月末日期进行序列填充...
wordDll为库的代码,TestDll为使用示例,宏.txt是格式化段落的宏 <br>附加:如果想知道函数中使用的值应该为多少,可以在Word操作的时候录制宏,然后使用单步调试的方式得到想要的值。 注:本着开源的精神,把...
10.3 构造函数和析构函数 .119 10.4 小 结 .122 第十一章 方 法 .124 11.1 方法的声明.124 11.2 方法中的参数.125 11.3 静态和非静态的方法.129 11.4 方法的重载.130 11.5 操作符重载.134 11.6 小 ...