随笔 - 64, 文章 - 11, 评论 - 12, 引用 - 0
数据加载中……

XmlDom 用法小谈

XmlDOM  用法小谈

        今天,我觉得自己的情绪不够好,我看他们的设计太不考虑性能方面的问题。而一味地讲究不要冗余,是啊教科书上也老是说数据库的设计要达到什么样的标准。我个人却老是觉得对适当地用冗余能换来大的性能提升是很有帮助的。我这个人过于死板了些吧?所以把这种情绪带进了工作,觉得很是不该。开篇写了题外话。

        前两天我设计了一个页面,这是一个多级联动的页面,当选了项目后,项目后面的单元格中的下拉框中出现与这个项目对应的方法,方法过后则是出现仪器,项目还联动着标准。当初考虑性能上的问题我在这个页面中采用了AJAX(AjaxPro)技术,经过使用发现了其中的一个很严重的错误(程序员爱把它称为BUG,但我认为没有满足要求的就是错误)。当点了一单元格时,会异步回到服务端拿数据,而在这期间用户是可以点其它的地方,这时候返回来的数据只会写在当前活动的单元格中,但这时活动的单元格却早已不是源目标了。所以出现了这个难以忍受的错误。我们不能要求或者假设用户不以很快的类似玩游戏的速度来操作MOUSE。所以我的这个设计构想是错误的。

        鉴于上面的原因,我决定对页面做如下的修改。在载入页之初,就通过服务端预期地把这个数据组强成XML文件放到页面上去,而页面单击找数据也就在客户端可以完成。这样就会大提高反应的速试了,也不会出现前面说的在这个异步的过程中客户的操作而引发错误。

      在服务端的工作(这是C#做的):我先把数据组织成XML文件,进而把它放在页面上。在服务端我采用了XmlWritter这个类。用法如下
StringBuilder sb=new StringBuilder();
        XmlWriterSettings settings 
= new XmlWriterSettings();
        settings.Indent 
= true;
        settings.OmitXmlDeclaration 
= true;
        settings.NewLineOnAttributes 
= false;
        _writer 
= XmlWriter.Create(sb,settings);
_writer.WriteStartDocument();

       在上面我们就构造好了XML写入器了。而在以下就只要调用下面几个方法就可以了。
_writer.WriteStartElement("ITEMS");
_writer.WriteStartElement(
"ITEM");
_writer.WriteAttributeString(
"ID","10");
_writer.WriteAttributeString(
"Name","PH");
_writer.WriteEndElement();
_writer.WriteFullEndElement()

//产生出来的样子
<ITEMS>
   
<ITEM ID="10" Name="PH"/>
</ITEMS>
        好了上面的代码可以让我产生出一个XML来了。

       上面准备好服务端,现在我得开始客户端了。这里我用到了IE浏览器中的XMLDOM这个组件了,在别的浏览器中也有另处的DOM组件的,其操作和语法甚至函数上都有很大相同的了。
xmlDom=new ActiveXObject("MSXML2.DOMDocument");
xmlDom.loadXML(strXml);//这是一个字符串
var root=xmlDom.selectSingleNode("ITEMS");
var items=root.selectNodes("ITEM");//找ROOT下所有的ITEM子节点。
var item=root.selectSingleNode("ITEM[@id=10]");//则是找其下一个ITEM其ID属性为10了。
关于XQL的语法,我在有空时会以一个短文来说一说的了。

posted on 2007-11-09 17:17 Robertxiao 阅读(459) 评论(0)  编辑 收藏 引用 所属分类: 天马行空


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理