【发布时间】:2016-01-03 14:31:11
【问题描述】:
我有一个 HTML 文档,它的某些属性中可能包含 < 和 >。我试图提取它并通过 XSLT 运行它,但 XSLT 引擎错误告诉我 < 在属性内无效。
我做了一些挖掘,发现它在源文档中被正确地转义了,但是当它通过innerHTML 加载到 DOM 中时,DOM 是 unencoding 的属性。奇怪的是,它对< 和> 执行此操作,但对& 之类的其他一些则不执行此操作。
这是一个简单的例子:
var div = document.createElement('DIV');
div.innerHTML = '<div asdf="<50" fdsa="&50"></div>';
console.log(div.innerHTML)
我假设 DOM 实现决定 HTML 属性可以不如 XML 属性严格,并且这是“按预期工作”。我的问题是,我可以在不写一些可怕的正则表达式替换的情况下解决这个问题吗?
【问题讨论】:
-
@Abel 我正在使用 jQuery 的
.html(),我只是试图减少到我认为“问题”正在发生的地方。源文档是 XML,我在使用.html()插入之前通过浏览器 XSLT 运行它。稍后我通过逆向过程将 XML 取出。我只是觉得奇怪的是 DOM unescaping 这个字符(而不是其他字符)。 -
我无法修改源 XML,需要在最后的输出中保留相同的内容。我可以在中间运行任何必要的转换,但我正在寻找一种比一些正则表达式替换更好的方法。特别是考虑到字符是
&lt;,文档中充满了。 -
@Abel 我唯一的目标是将它从 DOM 中取出,就像它进入时一样(如
&lt;)。我用.text(string)把它放进去,用.text()把它拿出来。这次往返的问题是输入不等于输出(仅在这种情况下)。 -
啊,对不起。嗯,这可能只有使用其他 DOM 方法才有可能,而不是
innerHTML。即,这有效:div.firstChild.attributes['title']。但这需要大量额外的机制来“模仿”innerHTML。
标签: javascript html xml xslt innerhtml