xml addattribute escaping&

时间:2011-01-31 20:42:50

标签: javascript xml xmldom

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

使用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& truck”

我得到了

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

不知何故,当文本进入属性时,它正在逃避&试。

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

如果&不在字符串中。

2 个答案:

答案 0 :(得分:3)

好吧,正如您在评论中注意到的那样,当文本存储到属性中时,文本 不会被重新转义。我认为您所看到的是“.xml”访问器会返回一些实际的XML标记所需的内容,以便您最终获得类似的属性值。

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

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

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

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

答案 1 :(得分:2)

当DOM树被序列化为词汇XML时,会自动发生转义。如果你在将字符串添加到DOM树之前将其转义,那么它就会像你发现的那样以双重转义结束。