繁体   English   中英

在XML文档中转义特殊字符

[英]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序列的末端)是特殊)或代表<&lt; 在XML中。

<![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[ ... ]]>

编辑:语法错误...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM