2010-08-09 1 views
3

У меня есть простой XML-файл, как так:.NET XML разрешает объекты беспомощно на Save

<?xml version="1.0" encoding="UTF-8"?> 
<foo attr="blah &#176; blah"/> 

Когда я загрузить его в .NET XmlDocument и выдает Save, то есть:

xmlDoc = New XmlDocument() 
xmlDoc.Load("c:\temp\bar.xml") 
xmlDoc.Save("c:\temp\bad.xml") 

новый XML-файл содержит разрешенный усилитель 176 (знак степени). Затем это прерывает последний черный ящик, в который я пытаюсь загрузить XML.

Я пробовал играть с кодировкой, чтобы иметь небольшой эффект. Возможно ли, чтобы синтаксический анализатор просто откликнулся на то, что произошло, не разрешая сущности? Инертно, он не разрешает & amp; # 176;

ответ

1

XmlDocument Load unescapes символы, также играли с ним и не могли найти какое-либо простое решение о том, как остановить это поведение.

маленький хак будет делать что-то вроде этого

foreach (XmlNode xn in xdoc.SelectNodes("descendant-or-self::*")) 
{ 
    foreach(XmlAttribute attr in xn.Attributes) 
    { 
    string val = System.Web.HttpUtility.HtmlEncode(attr.Value); 
    attr.Value = val; 
    } 
    if (!xn.InnerXml.Contains("<")) 
    { 
    string val = System.Web.HttpUtility.HtmlEncode(xn.InnerText); 
    xn.InnerText = val; 
    } 
} 

прежде чем .save(); Это лучшее, что я мог придумать, не используя всю неделю на этом.

+0

Это очень интересно. В итоге я пошел с & # 176; так как это было сохранено и загружено правильно моим приложением черного ящика. – ankh

 Смежные вопросы

  • Нет связанных вопросов^_^