使用xmltextreader对xml进行简单的读取和写入操作

使用xmltextreader对xml文件进行简单的以对象形式的读取和写入操作

BaseSerializeElement

-------------------------------------------------------------

using System;
using System.Xml;
using System.Collections;

namespace Local.Framework.Common
{
///

1<summary>   
2/// BaseXmlSerializer 的摘要说明。   
3/// --fallseir.li 20050427 15:12   
4/// </summary>

public class BaseSerializeElement
{
public BaseSerializeElement()
{
}
public BaseSerializeElement(XmlReader reader,bool isroot)
{
this._isroot=isroot;
ReadXml(reader,isroot);
}
public BaseSerializeElement(XmlReader reader):this(reader,false){}

#region attributes
public bool IsRoot
{
get{return _isroot;}
}
private bool _isroot;
public string TAG
{
get{return _tag;}
}
private string _tag;
public string Value
{
get{return _value;}
}
public string _value;
public string CData
{
get{return _cdata;}
}
private string _cdata;
public ArrayList Elements
{
get{return _elements;}
}
private ArrayList _elements;

public Hashtable Attributes
{
get
{
return _attributes;
}
}
private Hashtable _attributes;

private string _prefix;
private string _namespaceuri;
private string _xmllang;
//private string _xmlspace;
private string _baseuri;
//private XmlNameTable _nametable;

//root
private string _declaration;
private string _documenttype;

#endregion

public void AddAttribute(string key,string value)
{
if(_attributes==null)
_attributes=new Hashtable();
if(_attributes.ContainsKey(key))
{
_attributes[key]=value;
}
else
{
_attributes.Add(key,value);
}
}
public void AddElement(BaseSerializeElement element)
{
if(_elements==null)
_elements=new ArrayList();
_elements.Add(element);
}

#region IXmlSerializable 成员

public void WirteXmlRoot(XmlWriter writer)
{
writeRoot(writer);
WriteXml(writer);
}
private void writeRoot(XmlWriter writer)
{
writer.WriteProcessingInstruction("xml",this._declaration);
// writer.WriteDocType
}
public void WriteXml(XmlWriter writer)
{
if(this._prefix!="")
writer.WriteStartElement(this._prefix+":"+TAG);
else
writer.WriteStartElement(TAG);
//if(this._nametable!=null)

if(Attributes!=null)
{
foreach(object key in Attributes.Keys)
{
writer.WriteAttributeString(key as string,Attributes[key] as string);
}
}
if(Value!=null)
{
writer.WriteString(Value);
}
else
{
if(Elements!=null)
{
foreach(object item in Elements)
{
BaseSerializeElement inner=(BaseSerializeElement)item;
inner.WriteXml(writer);
}
}
}
writer.WriteEndElement();
}
//
// public System.Xml.Schema.XmlSchema GetSchema()
// {
// // TODO: 添加 AnyElement.GetSchema 实现
// return null;
// }
public void ReadXml(XmlReader reader)
{
ReadXml(reader,false);
}
private void ReadRoot(XmlReader reader)
{
while(reader.Read())
{
if(reader.EOF)
return;
switch(reader.NodeType)
{
case XmlNodeType.XmlDeclaration:
this._isroot=true;
this._declaration=reader.Value;
break;
// case XmlNodeType.Comment:
// AddComment(reader.Value);
// break;
case XmlNodeType.DocumentType:
this._documenttype=reader.Value;
break;
case XmlNodeType.Element:
return;
default:
break;
}

}
}
// public void AddComment(string comment)
// {
// _comments.Add(comment);
// }
public void ReadXml(System.Xml.XmlReader reader,bool isroot)
{
if(reader.NodeType==XmlNodeType.None||isroot)
{
ReadRoot(reader);
}

if(reader.EOF||reader.NodeType!=XmlNodeType.Element)
return;

this._tag=reader.LocalName;
this._prefix=reader.Prefix;
this._namespaceuri=reader.NamespaceURI;
this._xmllang=reader.XmlLang;
//this._xmlspace=reader.XmlSpace;
this._baseuri=reader.BaseURI;
//this._nametable=reader.NameTable;
int depth=reader.Depth;
bool isempty=reader.IsEmptyElement;
if(reader.HasAttributes)
{
int n=reader.AttributeCount;
for(int i=0;i

 1<n;i++) #endregion="" <summary="" _cdata="reader.Value;" _value="reader.Value;" addattribute(reader.name,reader.value);="" addelement(new="" args)="" baseserializeelement(reader));="" break;="" case="" console.writeline(format,args);="" format,params="" if((reader.depth="depth)&amp;&amp;(reader.Name==TAG))" if(isempty)="" if(reader.depth="depth+1)" localpostbb="" localpostbb.framework.common;="" namespace="" object[]="" print(string="" private="" reader.movetoattribute(i);="" return;="" switch(reader.nodetype)="" system.io;="" system.xml;="" system;="" tester="" using="" void="" while(reader.read())="" xmlnodetype.cdata:="" xmlnodetype.element:="" xmlnodetype.endelement:="" xmlnodetype.text:="" {="" }="" 读取所有内部xml元素="" ----------------------="">   
 2/// Class1 的摘要说明。   
 3///    
 4class Tester   
 5{   
 6/// <summary>   
 7/// 应用程序的主入口点。   
 8/// </summary>   
 9[STAThread]   
10static void Main(string[] args)   
11{   
12Tester tester=new Tester();   
13tester.TestSerialize();   
14Console.ReadLine();   
15}   
16public void TestSerialize()   
17{   
18BaseSerializeElement t=null;   
19string filename=@"E:\Program Files\Altova\XMLSpy2005\Examples\OrgChartDebug.xslt";   
20XmlTextReader reader=new XmlTextReader(filename);   
21  
22t=new BaseSerializeElement(reader,true);   
23reader.Close();   
24  
25StringWriter wr=new StringWriter();   
26XmlTextWriter writer=new XmlTextWriter(wr);   
27writer.Formatting=Formatting.Indented;   
28t.WirteXmlRoot(writer);   
29Console.WriteLine(wr.ToString());   
30writer.Close();   
31Console.WriteLine("successful!");   
32}   
33}   
34}   
35------------------ 
36
37初步代码 只对xml文件进行了简单的读写功能</n;i++)>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus