在javascript中线性化或取消缩进XML



我想知道如何使用Javascript线性化或取消缩进XML文本。

这篇文章描述了如何使用Java实现缩进或线性化XML,但我没有看到使用JavaScript的例子。

正如我在你的回答的评论中指出的那样,regex不是一种可靠的方法。更可靠的方法是解析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) && 
      /^[ rnt]*$/.test(node.textContent)) {
    node.parentNode.removeChild(node);
  }
}
var startXml = '<products>nt<product>ntt<code>1234</code>ntt<name>Widget 3000</name>nt</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);

根据tebs1200的建议,我将正则表达式从Java帖子移植(甚至改进)到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;
}

最新更新