ThroughoutCMS技术共享系列(2):XML访问类
上次把数据库访问类共享出来了,几个同事网上感慨了一番,真的没有想到我还保留5年前的代码,我说,代码本来就是应该被阅读和研究的,代码同样具有思想和情节,这就是在一穷二白的情况下的历史和轨迹。配置管理同样也是一位尽职的史官。
总结一下,上次给出的代码虽然可以直接运行和使用,的确存在大量可以改进的地方,现在列出部分意见:
1、不支持多种数据库连接(例如Oracle、DB2、Access,mySql等);
2、代码封装不彻底,面向对象,起码应该采取工厂方法。
3、不支持多线程,没有连接池的概念,同一时间只能建立一个连接;
4、对于事务处理考虑不够;
5、没有考虑到会话;
6、代码本身性能、语法方面还可以存在大量改进的地方。
......
一下子给出好几十条,看来还是有人研究了。这里就不在展开了,有机会专门开个专题讨论一下数据访问层的设计问题。
今天给出ThroughoutCMS技术共享系列第二章:XML访问类,恐怕这也是我们经常用到的一个关键基础类库,无论采用.net还是采用java、VC、python,只要是上规模的项目,都缺少不了它,关于为什么要采用XML的问题,这里就不在详细讨论了,网上资料有的是。
下面的代码同样是一个产品中的真实文件,只不过是第一版的,直接采用dom的思想,缺少SAX的操作,功能小而全,涉及到XML文件读取和节点操作,同样那句话,如果要用,可以直接拷贝,如果教学,非常实用。
// 本文件包含了XML数据访问的通用函数.
using System ;
using System.Globalization ;
using System.Xml ;
namespace CMS.Lib
{
public class XML
{
private XML(){}
/// <summary>
/// 加载XML文档,返回XmlDocument对象
/// </summary>
/// <param name="sXMLFile">xml文件</param>
/// <returns>加载的XmlDocument对象</returns>
public static XmlDocument LoadXML(string sXMLFile)
{
XmlDocument objXmlDoc=new XmlDocument();
 
相关文档:
这个例子要把bookstore.xml文件增加一条book记录
1 bookstore.xml
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
<book genre="love" ISBN="1234123">
<title>who am i </title>
<author>who</author>
  ......
我用ActiveXObject("Microsoft.xmldom")来装载xml文档时,竟然老是提示装载失败,后来上网搜索了下,说是不能直接包含这5个符号('><&"),必须选用&xx;方式来转义,可我找遍XML也没发现这些。
后来我独行排除,才发现有一个元素的属性值为有“|”,去除后就正常了。我真是觉得奇怪,网上也没有说 ......
http://topic.csdn.net/u/20080905/10/caea1689-4582-417a-8723-d008a3ae1a10.html?550638422
tringBuilder sb = new StringBuilder();
sb.Append(" <?xml version=\"1.0\"?> ");
......
添加记录到ds保存到xml
DataSet ds = new DataSet("myDs");
//从XML中读取数据
ds.ReadXml(Serve ......
这个是参照ibm网站上的文章做的。
xml源文件:
<?xml version="1.0"?>
<!DOCTYPE rss PUBLIC
"-//Netscape Communications//DTD RSS 0.91//EN"
"http://my.netscape.com/publish/formats/rss-0.91.dtd"
>
<rss version="0.91">
<channel>
<title>Meerkat: An Open2 Wire Servic ......