转义 XML 文档中的特殊字符

Escape special characters in XML documents

本文关键字:特殊字符 文档 XML 转义      更新时间:2023-09-26

我在网页上有一组按钮标签,我想获得一个特定的按钮标签,其内部文本是"保存"。(它没有 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:"元素的内容必须由格式正确的字符数据或标记组成。

我学会了不用于..在带有数组的循环中。我能做什么?请向我建议一些解决方法。

你解决的问题错了。您的问题是"在 XML 中包含<字符会破坏 XML"。您需要了解如何正确包含此类字符,而不是避免在数据中出现一个字符。没有必要避免标准的 for 循环。

使用 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);
}
您可以使用

新的 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[ ... ]]>里面

编辑:语法错误...