2011-01-31 6 views
1

Я убегаю строку, чтобы соответствовать другой строке.xml addattribute escaping &

Использование "& грузовиков автомобиля" 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" 

Так или иначе, когда текст идет в атрибуте он Ускользающий & снова.

Кто-нибудь знает, почему это происходит и как его остановить?

Это работает, если & не находится в строке.

+0

Является вашим последним 'alert()' really 'alert (lineItem.xml)' или должен сказать 'alert (lineItem.getAttribute (" c "));' ?? – Pointy

+0

это предупреждение (lineItem.xml) и возвращает узел xml, в который помещается строка. – Primetime

+0

alert (lineItem.getAttribute ("c")); возвращается "автомобиль ' s & грузовики" – Primetime

ответ

3

Ну, как вы обратите внимание на комментарии, текст не повторного спасся, когда она хранится в атрибута. Я думаю, что вы видите, что аксессуар «.xml» возвращает вам то, что должно выглядеть как-то для фактической разметки XML, чтобы вы могли получить такое значение атрибута.

Если вы думаете о самой разметке, для исходной немаскированной строки вы должны сделать это для того, чтобы быть действительным XML:

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

Другими словами, если бы вы не укажите амперсанд и апостроф, разметка недействительна. Ваш код, как написано, пытается обновить значение атрибута как строку , включая escape-последовательности.

При настройке значений атрибутов из JavaScript нет необходимости избегать специальных метасимволов XML. Это важно, когда вы готовите фактическую разметку XML для передачи XML-парсеру. Как только вы возитесь с DOM в JavaScript, XML уже разбирается.

2

Экранирование - это то, что происходит автоматически, когда дерево DOM сериализуется как лексический XML. Если вы выберете строку перед добавлением ее в дерево DOM, то она будет в конечном итоге вдвойне экранирована, как вы обнаружили.