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

原创 2005年04月27日 15:16:00

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

BaseSerializeElement

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

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

namespace Local.Framework.Common
{
 /// <summary>
 /// BaseXmlSerializer 的摘要说明。
 /// --fallseir.li 20050427 15:12
 /// </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<n;i++)
    {
     reader.MoveToAttribute(i);
     AddAttribute(reader.Name,reader.Value);  
    }
   }
   if(isempty)
    return;
   //读取所有内部xml元素
   while(reader.Read())
   {
    switch(reader.NodeType)
    {
     case XmlNodeType.EndElement:
      if((reader.Depth==depth)&&(reader.Name==TAG))
       return;
      break;
     case XmlNodeType.Element:
      if(reader.Depth==depth+1)
       AddElement(new BaseSerializeElement(reader));
      break;
     case XmlNodeType.Text:
      if(reader.Depth==depth+1)
       _value=reader.Value;
      break;
     case XmlNodeType.CDATA:
      if(reader.Depth==depth+1)
       _cdata=reader.Value;
      break;
    }    
   }   
  }

  #endregion
  private void print(string format,params object[] args)
  {
   Console.WriteLine(format,args);
  }
 }
}

tester
----------------------

using System;
using System.IO;
using System.Xml;

using LocalPostBB.Framework.Common;

namespace LocalPostBB
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Tester
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   Tester tester=new Tester();
   tester.TestSerialize();
   Console.ReadLine();
  }
  public void TestSerialize()
  {
   BaseSerializeElement t=null;
   string filename=@"E:/Program Files/Altova/XMLSpy2005/Examples/OrgChartDebug.xslt";
   XmlTextReader reader=new XmlTextReader(filename);
   
   t=new BaseSerializeElement(reader,true);
   reader.Close();
   
   StringWriter wr=new StringWriter();
   XmlTextWriter writer=new XmlTextWriter(wr);
   writer.Formatting=Formatting.Indented;  
   t.WirteXmlRoot(writer);
   Console.WriteLine(wr.ToString());
   writer.Close();
   Console.WriteLine("successful!");
  }
 }
}
------------------

初步代码 只对xml文件进行了简单的读写功能

c#中XmlTextReader读取xml

c#用xmlTextReader读取xml文件

Android-利用Document来对xml进行读取和写入操作-刘宇

首先先来介绍一下什么xml。xml是可扩展标记语言,他可以用来标记数据,定义数据类型。是一种允许用户对自己标记语言进行定义的源语言。解析XML文件的方法有很多方法:dom解析,就是document以及...

关于XML文档读取写入的简单操作

DOM解析读操作: 1,建立DocumentBuilderFactory DocumentBuilderFactory fac = DocumentBuilderFactory.newInst...

csharp XmlTextReader read xml file

xml file: l17pi6MYm2g= 4IGT6o/qA4vKYzlgizWsDg== U...

用Jaxp包中的SAX技术对XML文件进行解析并完成对文件的读取操作.doc

由于SAX解析相对于DOM解析来说有一定的优点,所以在一些特定的场合下我们会使用SAX技术完成对XML文件的解析。   具体来看:   SAX解析   在使用 DOM 解析 XML 文档...

java 使用DOM对XML文档进行增删改查操作

源代码package com.zc.homeWork18;import java.io.File; import javax.xml.parsers.DocumentBuilder; import j...

使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例(转载)

在.NET中使用DataSet来获取XML数据与保存XML数据很简单,很好用,不过有一些复杂点的XML结构,使用DataSet来操作就没有XmlDocument来操作这么好用了,所以本文在C#使用Xm...

使用Javascript和PHP对服务端XML文档进行操作

编辑工具与测试环境 netbeans 7.2.1 主要用来创建一个php项目,用于编辑php程序。 webstorm 6 主要用来方便javascript代码的编写工作。 xampp 1.8...
  • arqaboy
  • arqaboy
  • 2013年03月23日 13:30
  • 539

C#使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例

标签:XML 实例 XmlDocument 应用 保存 C#使用XmlDocument操作XML进行查询、增加、修改、删除、保存应用的实例 时间:2009-12-23 10:32:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用xmltextreader对xml进行简单的读取和写入操作
举报原因:
原因补充:

(最多只允许输入30个字)