强制XMLSerializer不折叠空标签?

时间:2012-11-29 21:17:18

标签: javascript xmlhttprequest internet-explorer-11 xmlserializer

是否可以通过任何配置选项告诉JavaScript XMLSerializer不要将空标签折叠为自动关闭标签?我正在向xml解析器提供一个xml字符串,然后在对树进行修改后将其重新序列化,但是如果我在输入中有一个明确的结束标记,则会将其折叠为输出中的自闭标记,这会导致问题。

3 个答案:

答案 0 :(得分:0)

我找不到任何东西,但是因为我使用的是JQuery,我使用了这个:

$('<div>').append( $(mynode).clone() ).html();

而不是

new XMLSerializer().serializeToString(mynode);

JQuery版本没有使用自动关闭标签。

注意:我的问题只出现在IE11上,所以我使用了:

if (Object.hasOwnProperty.call(window, "ActiveXObject") && !window.ActiveXObject && window.jQuery) {
  // is IE11 && Jquery
  $('<div>').append( $(newnode).clone() ).html();
} else {
  oldnode.outerHTML = new XMLSerializer().serializeToString(newnode);
}

答案 1 :(得分:0)

如果您没有可用的jquery并且只想通过xmlserialzer方式,那么您也可以使用 npm package&#39; xmldom&#39;

var serializer = require('xmldom').XMLSerializer;
var str = serializer.serializeToString('your node');

它负责自闭标签(例如脚本标签)。 NPM xmldom 在IE11中正常工作。

答案 2 :(得分:0)

我面临类似的问题。要仅在根元素(没有 xmldom jquery )中解决它,只需检查xmlstring是否以自闭标签结尾并替换:

    //let roottagname = 'script'
    ...
    const serializer = new XMLSerializer();
    let xmlStr = serializer.serializeToString(d);
    if (xmlStr.endsWith('/>')) xmlStr = xmlStr.slice(0, -2) + '></' + roottagname + '>';