我想知道如何使用Javascript線性化或取消縮進XML文本。javascript中的線性化或unindent XML
這篇文章Unindent or linearize XML介紹瞭如何使用Java來做到這一點,但我沒有看到使用JavaScript的例子。
我想知道如何使用Javascript線性化或取消縮進XML文本。javascript中的線性化或unindent XML
這篇文章Unindent or linearize XML介紹瞭如何使用Java來做到這一點,但我沒有看到使用JavaScript的例子。
由於tebs1200建議,我將正則表達式從Java郵件移植(甚至改進)爲Javascript。
這就是:
// This Javascript function is to linearize and return the XML input String
function linearize(xml) {
return (xml!= null) ? xml.trim().replace(/(>|>){1,1}(|\t|\n|\r|\s)*(<|<){1,1}/g, "$1$4") : null;
}
這並不完全可靠。它將錯誤地從'
正如我在上你的答案的評論指出,正則表達式是不是一個可靠的方法來做到這一點。一個更可靠的方法是解析XML,刪除都是空白的任何文本節點,然後重新序列化:
function parseXml(txt) {
var parser, xmlDoc;
if (window.DOMParser) {
parser = new DOMParser();
xmlDoc = parser.parseFromString(txt, "text/xml");
} else // Internet Explorer
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(txt);
}
return xmlDoc;
}
function serializeXml(node) {
try {
// XMLSerializer exists in certain browsers
var serializer = new XMLSerializer();
return serializer.serializeToString(node);
} catch (e) {
// Internet Explorer has a different approach to serializing XML
return elem.xml;
}
}
function removeWhitespace(node) {
if (node.childNodes && node.childNodes.length) {
Array.prototype.slice.call(node.childNodes).forEach(removeWhitespace);
}
if ((node.nodeType === 3 || node.nodeType === 4) &&
/^[ \r\n\t]*$/.test(node.textContent)) {
node.parentNode.removeChild(node);
}
}
var startXml = '<products>\n\t<product>\n\t\t<code>1234</code>\n\t\t<name>Widget 3000</name>\n\t</product>\n</products>'
console.log('Before:');
console.log(startXml);
var dom = parseXml(startXml);
removeWhitespace(dom);
var endXml = serializeXml(dom);
console.log('After:');
console.log(endXml);
非常感謝JLRishe,你的代碼片段完美地工作,你的方法已經足夠。 –
Java的例子提供了一個很容易理解的實現。所需的正則表達式可用。您是否嘗試將代碼移植到JavaScript?分享迄今爲止您嘗試過的內容。 – tebs1200