2011-01-31 8 views
1

別の文字列と一致するように文字列をエスケープしています。テキストは、それが再び&をエスケープされた属性に入るとき、私はどういうわけかxml addattributeエスケープ&

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

を取得

を文字列 "車の&トラック" を使用して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); 
    } 
} 

を使用して

これがなぜ起こっているのか、どのように停止するのか誰でも知っていますか?

これは、&が文字列に含まれていない場合に機能します。あなたがコメントで注意して

+0

最後の 'alert()'は本当に 'alert(lineItem.xml)'ですか、 'alert(lineItem.getAttribute(" c "));' ?? – Pointy

+0

これはalert(lineItem.xml)で、文字列が配置されているxmlノードを返します。 – Primetime

+0

アラート(lineItem.getAttribute( "c")); 「車' s &トラック」を返します。 – Primetime

答えて

3

まあ、テキストは、それが属性にに格納されている場合ないが再エスケープされています。あなたが見ているのは、 ".xml"アクセサが、あなたがそのような属性値になるためには、実際のXMLマークアップのように見えるものを返すということです。

あなたは、マークアップ自体を考える場合は、元のエスケープ文字列のためにあなたはそれが有効なXMLであるためには、これを行うために必要があるでしょう:あなたはした場合、言い換えれば

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

ありませんアンパサンドとアポストロフィを引用すると、マークアップは無効になります。書かれたあなたのコードは、エスケープシーケンスを含む文字列に属性値を更新しようとしています。

JavaScriptから属性値を設定する場合、特殊なXMLメタ文字をエスケープする必要はありません。 XMLパーサーに渡す実際のXMLマークアップを準備するときだけ重要です。 JavaScriptでDOMを使いこなすと、XMLはすでに解析されています。

2

エスケープは、DOMツリーがレキシカルXMLとしてシリアル化されたときに自動的に行われる処理です。 DOMツリーに追加する前に文字列をエスケープすると、それは二重にエスケープされてしまいます。

関連する問題