2011-06-04 60 views
5

如果我要使用XML文件来存储一些信息,我是否需要一个读取/写入数据的XML解析器?我可以使用字符串操作函数吗?为什么不呢?使用XML文件存储数据

回答

5

你可以想象使用字符串操作函数,因为这是XML库最终使用的。 XML文档只是特殊格式的长字符串。但是,除非您对XML有所了解(以及什么是和不是有效的XML),否则现在使用XML解析器/序列化器将为您节省很多麻烦。 XML(名称空间,转义序列等)有细微差别,这些问题会导致本地代码中的问题不知如何正确处理它们。当你处理完所有特殊情况之后,无论如何你都会有效地写出一个半分析的XML解析器。

4

不要......我重复......不要手动解析或构建XML。

在我的工作中,我们在不同的供应商之间实现了很多接口。我无法告诉你我们有多少次在基于xml的界面上工作,并且遇到了某种转义编码/解码问题。我连接到基于xml的服务时将运行的第一个测试之一是在输入中添加非法的xml字符。

你叫什么名字?:鲍勃<> &“

错误解析XML文档

我们遇到了很多次了,如果我们的任何工程师检查有相近之处:!

 
xml = "<rootnode>" 
xml += "<leafnode>" + someValue + "</leafnode>" 
xml += "</rootnode>" 

我们会认真考虑他们的对接可变薪酬只要“someValue中”包含非法字符,你pooched那么你的代码开始看起来像这样:。

 
xml = "<rootnode>" 
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>" 
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>" 
xml += "</rootnode>" 

然后东西还在吹起来,这样的天才工程师尝试:

 
xml = "<rootnode>" 
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>" 
xml += "<leafnode>" + XmlEscape(someValue) + "</leafnode>" 
xml += "</rootnode>" 

xml = XmlEscape(xml) 

注:这个过程实际上发生在我身上两次在接口上工作时。

您知道它之前,通过线路的流结束看起来像

 
&amp;lt;rootnode>HELP<rootnode> 
&amp;lt;rootnode&gt;ME&amp;lt;rootnode&amp;gt; 

摘要:

请使用图书馆。 k thx再见。

+0

是什么库用于XML?有没有建立或标准的图书馆? – 2012-02-14 08:14:16

+0

在Java中,它们是库,在Ruby中是宝石。假设Java,继续到Apache网站并查看他们的工具。 – Thufir 2012-03-26 12:14:34