在javascript中线性化或取消包含XML

在javascript中线性化或取消包含XML,javascript,xml,indentation,Javascript,Xml,Indentation,我想知道如何使用Javascript线性化或取消嵌入XML文本 这篇文章描述了如何使用Java实现,但我没有看到使用JavaScript的例子 正如建议的那样,我将正则表达式从JavaPost移植到Javascript,甚至改进了它 这是: // This Javascript function is to linearize and return the XML input String function linearize(xml) { return (xml!= null) ? xml.t

我想知道如何使用Javascript线性化或取消嵌入XML文本

这篇文章描述了如何使用Java实现,但我没有看到使用JavaScript的例子

正如建议的那样,我将正则表达式从JavaPost移植到Javascript,甚至改进了它

这是:

// This Javascript function is to linearize and return the XML input String
function linearize(xml) {
return (xml!= null) ? xml.trim().replace(/(>|&gt;){1,1}( |\t|\n|\r|\s)*(<|&lt;){1,1}/g, "$1$3") : null;
}

正如我在对你的回答的评论中所指出的,正则表达式不是一种可靠的方法。一种更可靠的方法是解析XML,删除所有都是空白的文本节点,然后重新序列化它:

函数parseXmltxt{ var解析器,xmlDoc; if window.DOMParser{ parser=新的DOMParser; xmlDoc=parser.parseFromStringtxt,text/xml; }else//internetexplorer { xmlDoc=新的ActiveXObjectMicrosoft.XMLDOM; xmlDoc.async=false; xmlDoc.loadXMLtxt; } 返回xmlDoc; } 函数序列化XmlNode{ 试一试{ //XMLSerializer存在于某些浏览器中 var serializer=新的XMLSerializer; 返回serializer.serializeToStringnode; }抓住e{ //Internet Explorer有一种不同的序列化XML的方法 返回elem.xml; } } 函数removeWhitespacenode{ 如果node.childNodes&&node.childNodes.length{ Array.prototype.slice.callnode.childNodes.forEachremoveWhitespace; } 如果node.nodeType==3 | | node.nodeType==4&& /^[\r\n\t]*$/.testnode.textContent{ node.parentNode.removeChildnode; } } var startXml='\n\t\n\t\t1234\n\t\tWidget 3000\n\t\n' console.log'Before:'; console.logstartXml; var dom=parseXmlstartXml; 去除空白; var endXml=serializeXmldom; console.log'After:';
console.logendXml;Java示例提供了一个非常容易理解的实现。所需的正则表达式可用。您是否尝试将代码移植到JavaScript?分享你迄今为止的尝试。这并不完全可靠。它将错误地从Go here->中删除一个空格,如果您需要,它也不会删除编码为实体的空白。非常感谢您,您的代码片段非常有效,您的方法也足够了。