1

我正在转义一个字符串以匹配另一个字符串。

使用 javascript

function escapeCode()
{
     var a = RequestIsland.XMLDocument.firstChild;
     var lineItems = a.selectNodes( "//a/p" );
     while ( (lineItem = lineItems.nextNode()) != null )
     {      
        var text = lineItem.getAttribute("c");
        alert(text);
        text = escapeXML(text);
        lineItem.setAttribute("c",text);
        alert(text);
        alert(lineItem.xml);
     }
}

使用字符串“汽车和卡车”

我明白了

"car's & trucks" 
"car's & trucks" 
"car's & trucks"

不知何故,当文本进入属性时,它再次转义 &。

任何人都知道为什么会发生这种情况以及如何阻止它?

如果 & 不在字符串中,则此方法有效。

4

2 回答 2

3

好吧,正如您在评论中指出的那样,文本在存储属性中时不会被重新转义。我认为您所看到的是“.xml”访问器为您提供了一些实际 XML 标记的外观,以便您最终获得这样的属性值。

如果您考虑标记本身,对于原始的未转义字符串,您需要这样做才能使其成为有效的 XML:

<tag c='car&apos;s &amp; trucks'>

换句话说,如果您引用与号和撇号,则标记将无效。您编写的代码正在尝试将属性值更新为包含转义序列的字符串。

从 JavaScript 设置属性值时,无需转义特殊的 XML 元字符。仅当您准备将实际 XML 标记传递给 XML 解析器时才重要。一旦你在 JavaScript 中弄乱了 DOM,XML 就已经被解析了。

于 2011-01-31T21:09:15.523 回答
2

转义是当 DOM 树被序列化为词法 XML 时自动发生的事情。如果您在将字符串添加到 DOM 树之前对其进行转义,那么正如您所发现的那样,它最终会被双重转义。

于 2011-02-01T11:38:09.640 回答