net处理xml
.net平台是基于xml的,它提供了对xml的内置支持。
很自然的可以实现对象的串行化,这也使得远程对象传递成为可能。
同时这种支持为对象关系映射提供了基石。
数据库数据可以很容易转化为xml,而xml又可以很容易反串行化为对象。
从而最终实现数据库关系数据与对象之间的映射。
.net中处理xml的命名空间是system.xml
处理方式有:
第一、利用MSXML4.0 COM组件,操作xml。使用了与COM交互性。注意命名空间是MSXML2
主要类有:DOMDocumnet40,方法有selectSingleNode,selectNodes
IXMLDOMNodeList,方法:nextNode
IXMLDOMNode
-------------会增加开销。
第二、流读写方式,耗内存少。元素节点有name无value,有Text, 文本节点无name,有value。
注意xmlnodeType枚举类型的使用。
1、XmlReader(抽象类)
只进只读内存要求不高
注意,xmlReader xr=XmlReader.Create()获得一个读取器,这里用的是工厂模式,用户并不关心
实际的读取器类是什么。
然后利用xr.read() (文件)或者xr.EOF (流)实现遍历读取器,判断节点类型执行读取操作。
常用方法:xr.ReadElementString,xr.MoveToContent,xr.GetAtrribute
可以利用xr验证xml是否符合模式。
{
..........
XmlReaderSettings settings=new XmlReaderSettiongs();
settngs.Schemas.add('targetnameSpace',"books.xsd");
settings.XsdValidate=true;
settings.ValidatationEventHandler+=new ValidatationEventHandler(.ehandle)
XmlReader xr=XmlReader.Create(..,settings);
.......
}
//事件处理程序
ehandle(...)
{
.......
}
2、XmlWriter( 抽象类)写设置类XmlWriterSettings settings=new ...
XmlWriter xw=XmlWriter.Creater(....,settings)
xw.WriteStartDocument/xw.WriterElementString/xw.WriteStartElement/WriteAttributeString....
xw.flush()/xw.close
第三、DOM模型,XMLNode/XmlNodeList构成了DOM的核心,适应于随机访问xml
1、XmlDocument doc=new XmlDocument()
doc.selectSigleNode/selectnodes/doc.createElement/XmlElement/doc.DocumentElement.append/
doc.Save/WriteContentto(...流对象)
2、(视图导航模式)XPathNavigator基于XmlDocument或者XPathDocument(只读)创建,System.Xml.XPath
xpathNodeItarator
XmlNavigator nv=doc.CreateNavigator(..);
xpathNodeItarator ite= nav.select('xpath')
while(ite.movenext())
{
xpathNodeItarator ite2 =ite.current.selectdscendants(..)
while(...)
{}
}
附:
xml样式转换:System.xml.xsl
XslTransForm xsltransform=new XslTransForm();
xsltransform.load('.xsl');
xsltransform.transform('books.xml',.htm);