【问题标题】:Force XMLSerializer not to collapse empty tags?强制 XMLSerializer 不折叠空标签?
【发布时间】:2012-11-29 21:17:17
【问题描述】:

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

【问题讨论】:

  • 对这个问题寄予厚望。同样的问题,在 outerHTML = "xxxx" 中使用的折叠文本区域(Ajax4JSF)完全搞砸了一切。
  • 在 IE11 中使用 XMLSerializer 将 XHR response.responseXML 对象转换为字符串时出现类似问题。返回不在 IE 中呈现的自封闭脚本标签。打算用正则来修复,谁有其他解决办法

标签: javascript xmlhttprequest internet-explorer-11 xmlserializer


【解决方案1】:

如果你没有 jquery 并且只想通过 xmlserialzer 方式,你也可以使用 npm package 'xmldom'

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

它负责自我关闭标签(例如脚本标签)。 NPM xmldom 在 IE11 中运行良好。

【讨论】:

【解决方案2】:

什么都找不到,但是因为我使用的是 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);
}

【讨论】:

    【解决方案3】:

    我面临类似的问题。要仅在根元素中解决它(不带 xmldomjquery) - 只需检查 xmlstring 是否以自闭合标签结尾并替换它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多