2014-10-30 200 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方法会处理该问题。