2010-08-09 8 views
3

我有一個簡單的XML文件,像這樣:.NET XML幫倒忙解決實體上的保存

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

當我將其加載到.NET XmlDocument的,併發出保存,即:

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

新的XML文件包含已解析的放大器176(度符號)。這然後打破了我試圖加載XML到最後的黑匣子。

我試過玩編碼,效果不大。解析器是否有可能迴應出現的內容,而不解析實體?尤其是,它不能解決問題。

回答

1

XmlDocument加載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 2010-08-11 08:39:44