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 に答える