2014-10-30 126 views
0

假設我有下面的代碼,其中是否XElement.Parse特殊字符轉義

  xmlElement.AddAfterSelf(XElement.Parse(sbXml.ToString())); 
  • XMLELEMENT:和的XElement包含父標籤

  • sbXml:StringBuilder的與XML字符串像這<Child name='Hi'></Child>(未轉義的特殊charcters或xml實體,但有效的xml)

XElement.Parse確保正確編碼特殊字符,以便當我做XDocument.Save我不打異常的?

+0

不要使用StringBuilder嘗試在開始時嘗試構建XML,請使用類似LINQ to XML或XmlWriter的API。 – 2014-10-30 13:30:07

+0

@MartinHonnen這會太麻煩了,還是我做錯了?因爲我做了'AppendFormat',xml進入了參數ex; 'AppendFormat(「」,childEntity.Name)' – Deeptechtons 2014-10-30 13:43:39

+0

是的,如果'childEntity.Name'包含&符號或小於符號' <或單引號'''那麼你的字符串生成器方法不會產生格式良好的XML。如果您使用'new XElement(「child」,new XAttribute(「name」,childEntity.Name))'並且稍後保存XElement或將它添加到所有的樹是正確的。 – 2014-10-30 15:01:31

回答

1

XDocument.Load/Parse以及XElement.Load/Parse使用XML解析器(其在.NET框架是XmlReader一個具體子類),當然這種方式,預計良好的XML作爲輸入。使用字符串連接來構造XML並不是.NET框架中的正確方法,因爲有像XmlWriter這樣的類,當然還有基於LINQ to XML的樹或DOM實現,它們允許您構建XML並確保任何已保存的序列化表示是格式良好的XML(或者在構建和序列化樹時出現錯誤,指出問題)。因此,不要使用字符串連接,而應使用XmlWriter或LINQ to XML構建XML,例如使用new XElement("child", new XAttribute("name", childEntity.Name))。這樣,如果childEntity.Name包含某些需要轉義的字符(如<&),則SaveToString方法會處理該問題。