[英]Escape special characters in XML documents
我在网页上有一组按钮标签,并且我想获取一个其innerText为“保存”的特定按钮标签。 (它没有ID。)所以我有这段代码
var tags = document.getElementsByTagName("button");
for (var i = 0; i < tags.length; i++) {
if (tags[i].innerText === 'Save') {
tags[i].click();
break;
}
}
当我在chrome控制台中尝试时,它可以完美工作。 但是我不能在我的果冻文件中包含它(这是一个将被处理成html的xml标记;类似于jsp。)
问题是for循环中的“ <”运算符导致了
SAXParserException:“元素的内容必须包含格式正确的字符数据或标记。”
而且我学会了不要在数组中使用for..in循环。 我能做什么? 请建议我一些解决方法。
您正在解决错误的问题。 您的问题是“在XML中包含<
字符会破坏XML”。 您需要找出如何正确包含这样的字符,而不是避免在数据中出现任何字符。 无需避免标准的for循环。
任一包装与CDATA标记,其部分(其停止XML特殊字符(除CDATA序列的末端)是特殊)或代表<
用<
在XML中。
<![CDATA[
for (var i = 0; i < j; i++) {
etc(i);
}
]]>
要么
for (var i = 0; i < j; i++) {
etc(i);
}
您可以使用新的Array.forEach
方法进行迭代,但仅JavaScript 1.6可用:
var tags = Array.prototype.slice.call(document.getElementsByTagName("button"));
tags.forEach(function (tag) {
// ...
});
但是真正的解决方案是将您的代码放入<![CDATA[]]>
:
<code>
<![CDATA[
var tags = document.getElementsByTagName("button");
for (var i = 0; i < tags.length; i++) {
// ...
}
]]>
</code>
var limit = tags.length;
//loop until 0 (which is false)
while(limit) {
if (tags[tags.length-limit].innerText === 'Save') {
tags[tags.length-limit].click();
break;
}
limit--;
}
将其放入<[CDATA[ ... ]]>
编辑:语法错误...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.