转义XML文档中的特殊字符

时间:2012-04-19 06:03:44

标签: javascript xml for-loop iteration markup

我在网页上有一组按钮标签,我想获得一个特定的按钮标签,其内部文本是“保存”。 (它没有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。)

问题在于“&lt;” for循环中的运算符导致此

SAXParserException:“元素的内容必须包含格式良好的字符数据或标记。”

我学会了不使用带有数组的循环。我能做什么?请给我一些解决方法。

4 个答案:

答案 0 :(得分:6)

你正在解决错误的问题。您的问题是“在XML中包含<字符会破坏XML”。您需要找到如何正确包含这样一个字符,而不是避免让您的数据出现在您的数据中。没有必要避免循环标准。

用CDATA标记包装该部分(阻止XML特殊字符(CDATA序列的结尾除外)是特殊的)或用XML表示< &lt;

<![CDATA[
for (var i = 0; i < j; i++) {
    etc(i);
}
]]>

for (var i = 0; i &lt; j; i++) {
    etc(i);
}

答案 1 :(得分:2)

您可以使用新的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>

答案 2 :(得分:1)

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--;
}

答案 3 :(得分:0)

将其放在<[CDATA[ ... ]]>

编辑:错误的语法......