在线程什么是你最喜欢的"程序员无知"宠儿?,出现以下答案,有大量的赞成票:
Programmers who build XML using string concatenation.
我的问题是,为什么通过字符串连接(例如StringBuilder在C#中)构建XML 不好?
我过去已经多次这样做了,因为对于我正在使用的数据结构/对象来说,它有时是从A点到B点的最快捷方式.到目前为止,我提出了一些原因,为什么这不是最好的方法,但有什么我忽略的?为什么要避免这种情况?
<?xml version="1.0"?>).这有害吗?StringBuilder),这是否需要关注?据推测,类似的类XmlWriter也需要做一些字符串操作......XmlSerializer自动序列化/反序列化类.好的,我同意.C#有很多有用的类,但有时我不想为一些非常快速的类创建类,比如写出日志文件或其他东西.这只是我懒惰吗?如果我正在做一些"真实"的事情,这是我处理w/XML的首选方法.S P*_*S P 14
我认为可读性,灵活性和可扩展性是重要因素.考虑下面的Linq-to-Xml:
XDocument doc = new XDocument(new XDeclaration("1.0","UTF-8","yes"),
new XElement("products", from p in collection
select new XElement("product",
new XAttribute("guid", p.ProductId),
new XAttribute("title", p.Title),
new XAttribute("version", p.Version))));
Run Code Online (Sandbox Code Playgroud)
你能找到比这更容易的方法吗?我可以将它输出到浏览器,将其保存到文档,在几秒钟内添加属性/元素等等......只需添加几行代码即可.我可以毫不费力地用它做几乎所有事情.
我认为问题在于您不是将 xml 文件视为逻辑数据存储,而是将其视为写入字符串的简单文本文件。
很明显,这些库会为您进行字符串操作,但是读取/写入 xml 应该类似于将数据保存到数据库中或逻辑上类似的东西
实际上,我发现字符串连接的最大问题是第一次没有正确,而是在代码维护期间保持正确.通常,使用字符串concat完美编写的XML片段会更新以满足新的要求,并且字符串连接代码太脆弱了.
只要替代方案是XML序列化XmlDocument,我就可以看到简单参数支持字符串concat.然而,从那以后XDocument.也就是说,没有理由再使用string concat来构建XML了.有关编写XML的最佳方法,请参阅Sander的答案.
另一个好处XDocument是XML实际上是一个相当复杂的标准,大多数程序员根本就不理解它.我目前正在处理一个向我发送"XML"的人,其中包含不带引号的属性值,缺少结束标记,不正确的区分大小写以及不正确的转义.但是因为IE接受它(作为HTML),它必须是正确的!叹息......无论如何,重点是字符串连接可以让你写任何东西,但XDocument会强制符合标准的XML.
我在2006年写了一篇关于字符串连接生成的XML的博客文章.简单的一点是,如果XML文档无法验证(编码问题,命名空间问题等),那么它不是XML,也不能被视为XML.
我已经看到XML文档存在多个问题,这些问题可以直接归因于使用字符串连接手动生成XML文档,并且几乎总是围绕正确使用编码.
问问自己这个; 我目前使用什么字符集编码我的文档('ascii7','ibm850','iso-8859-1'等)?如果我将UTF-16字符串值写入已手动声明为"ibm850"的XML文档,会发生什么?
鉴于.NET与XmlDocument的XML支持的丰富性,现在尤其是XDocument,在基本字符串连接恕我直言中不使用这些库必须有一个非常有说服力的论点.
| 归档时间: |
|
| 查看次数: |
2967 次 |
| 最近记录: |