C#操作XML方法集合

 

http://blog.csdn.net/mengxj85/archive/2008/09/30/3005557.aspx

using System.Xml;
using System.IO;

/// <summary>
/// XMLProc 的摘要说明
/// 将数据写入XML文件的方法
/// SaveXML_DataSet()利用DataSet写入XML文件
/// SaveXML_XmlTextWriter()利用XmlTextWriter写入XML文件
/// SaveXML_XmlNode()利用XmlNode写入XML文件
///
/// 从XML文件中读取数据
/// GetXML_XmlTextReader()
/// GetXML_XmlNodeReader()
/// </summary>
public class XMLProc
{
 public XMLProc()
 {
  //
  // TODO: 在此处添加构造函数逻辑
  //
 }
    ///<summary>
    /// 利用XmlTextWriter不容易实现追加,也就是说每次写入XML文档的数据都是覆盖式的,不容易实现在原有数据的基础上追加数据,
    /// 而采用XmlNode模式就能方便地实现数据追加
    /// 利用DataSet也不是追加数据
    ///</summary>
   
    //利用DataSet把数据写入XML文件,不实现追加
    public static string SaveXML_DataSet(BaseInfo.Phonebook pb)
    {
        try
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("name", Type.GetType("System.String"));
            dt.Columns.Add("telphone", Type.GetType("System.String"));
            ……

            DataRow dr = dt.NewRow();
            dr[0] = pb.name;
            dr[1] = pb.telphone;
            ……

            dt.Rows.Add(dr);
            System.Data.DataSet ds = new DataSet();
            ds.Tables.Add(dt);

            //将DataSet里面的数据写入XML
            ds.WriteXml(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
           
            return "true";
        }
        catch(Exception ex)
        {
            return ex.ToString();
        }
    }   
    //利用xmlTextWriter往XML文件写入数据,没有实现追加
    public static string SaveXMLData_XmlTextWriter(BaseInfo.Phonebook pb)
    {
        try
        {
            //创建一个XmlTextWriter类的实例对象
            System.IO.FileInfo file = new FileInfo(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
            //if (!file.Exists)
         
            XmlTextWriter textWriter = new XmlTextWriter(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"), System.Text.Encoding.UTF8);
           
            //开始写过程,调用WriterStartDocument方法写入文件头信息
            //例如<?xml version="1.0" encoding="utf-8"?>
            textWriter.WriteStartDocument();

            //写入根节点<phonebook></phonebook>
            textWriter.WriteStartElement("phonebook");
            textWriter.WriteStartElement("member");

            //写入节点name
            textWriter.WriteStartElement("name", "");
            //为name节点写入用户输入的值
            textWriter.WriteString(pb.name);
            //写入name节点的结束符
            textWriter.WriteEndElement();

            textWriter.WriteStartElement("telphone", "");
            textWriter.WriteString(pb.telphone);
            textWriter.WriteEndElement();

            ……

            //写入文档结束,调用WriteEndDocument方法
            textWriter.WriteEndDocument();

            //关闭textWriter
            textWriter.Close();

            return "true";       
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }
    }
    //利用XmlNode往XML文件写入数据,可以实现追加
    public static string SaveXMLData_XmlNode(BaseInfo.Phonebook pb)
    {
        try
        {
            //创建一个XmlDocument 对象,用于载入存储信息的XML文件
            System.Xml.XmlDocument xdoc = new XmlDocument();
            xdoc.Load(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
            //创建一个menber节点并将它添加到根节点下
            XmlElement parentNode = xdoc.CreateElement("member");
            xdoc.DocumentElement.PrependChild(parentNode);
            //创建所有用于存储信息的节点
            XmlElement nameNode = xdoc.CreateElement("name");
            XmlElement telphoneNode = xdoc.CreateElement("telphone");
            ……

            ///获取文本信息
            XmlText nameText = xdoc.CreateTextNode(pb.name);
            XmlText telphoneText = xdoc.CreateTextNode(pb.telphone);
            ……

            ///将上面的各个存储信息节点添加到menber节点下,但并不包含最终的值
            parentNode.AppendChild(nameNode);
            parentNode.AppendChild(telphoneNode);
            ……

            ///将上面获取的文本信息添加到与之相对应的节点中
            nameNode.AppendChild(nameText);
            telphoneNode.AppendChild(telphoneText);
            ……

            ///保存存储信息的XML文件
            xdoc.Save(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));

            return "true";
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }
    }

    //XmlTextReader类实现的查找程序
    public static string GetXML_XmlTextReader(string keyName)
    {
        //XMLTextReader读取XML文件
        XmlTextReader xmltextreader = new XmlTextReader(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
        if (keyName == "")
        {
            string outMsg = "";
            string currentNodeName = "";
            int i = 1;
            //利用xmltextreader对象的Read()方法循环读取文件的节点
            while (xmltextreader.Read())
            {
                //当节点类型是元素的时候,记录该节点名称
                if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element)
                {
                    currentNodeName = xmltextreader.LocalName.ToString();
                }
                if (xmltextreader.NodeType == System.Xml.XmlNodeType.Text)
                {
                    //把这个人的属性组织成文本串,便天页面输出
                    outMsg += "<tr bgColor=#fff5b1><td>" + currentNodeName + "</td><td>" + xmltextreader.Value + "</td></tr>";
                }
                if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element && xmltextreader.LocalName.Equals("member"))
                {
                    outMsg += "<tr><td>联系人:</td><td><font color=red>(" + (i++) + ")</font></td></tr>";
                }
            }
            outMsg = "<table>" + outMsg + "</table>";
            //关闭xmltextreader
            xmltextreader.Close();

            //显示联系人的详细信息
            //Response.Write(outMsg);
            return outMsg;
        }
        else
        {
            //XmlTextReader xmltextreader = new XmlTextReader(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
            bool findflag = false;
            string outMsg = "<table><tr><td collspan=2><font color=red>已经查找到下列联系人:</font></td></tr>";
            string currentNodeName = "";
            //利用xmltextreader对象的Read()方法自我表现读取文件的节点
            while (xmltextreader.Read())
            {
                //当找到了要查找的人,并且当前节点为元素,并且节点名称为"member"时退出循环
                if (findflag == true && xmltextreader.NodeType == System.Xml.XmlNodeType.Element && xmltextreader.LocalName.Equals("member"))
                {
                    break;
                }
                //当节点类型是元素的时候,记录该节点名称
                if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element)
                {
                    currentNodeName = xmltextreader.LocalName.ToString();
                }
                //还没有查找到指定的人,并且当前节点类型为文本,并且当前节点的节点值与要查找的人符合时
                if ((findflag == false) && (xmltextreader.NodeType == System.Xml.XmlNodeType.Text) && (xmltextreader.Value == keyName))//当为文本类型同时对应的值为要查找的人的时候
                {
                    findflag = true;//设置找到了要查找的人的标志
                }
                //如果已经找到,并且当前节点类型为文本时,循环记录这个人的所有信息
                if (findflag == true && xmltextreader.NodeType == System.Xml.XmlNodeType.Text)
                {
                    outMsg += "<tr bgcolor=#fff5b1><td align=right>" + currentNodeName + ":</td><td>" + xmltextreader.Value + "</td></tr>";
                }
                //如果已经找到了这个人,同时Xtr当前为文本类型,那么
            }
            //关闭xmltextreader
            xmltextreader.Close();
            outMsg += "</table>";

            //显示查找的人的详细信息
            //Response.Write(outMsg);
            return outMsg;
        }
    }
    //利用XmlNodeReader实现查找的程序
    public static string GetXML_XmlNodeReader(string keyName)
    {
        XmlDocument xml = new XmlDocument();
        bool findNode = false;

        try
        {
            xml.Load(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
        }
        catch
        { }

        XmlNodeReader read = new XmlNodeReader(xml);
        while (read.Read())
        {
            if (read.NodeType == System.Xml.XmlNodeType.Element && read.LocalName.ToString().Equals(keyName))
            {
                read.Read();
                if (read.NodeType == System.Xml.XmlNodeType.Text)
                {
                    //Response.Write(read.Value);
                    return read.Value;
                    //break;
                }
            }
        }
        return "";
    }
}

 

 

 http://www.docin.com/p-924553.html#

public class XmlControl
{
protected string strXmlFile;
protected XmlDocument objXmlDoc = new XmlDocument();

public XmlControl(string XmlFile)
{
//
// TODO: 在这里加入建构函式的程序代码
//
try
{
objXmlDoc.Load(XmlFile);
}
catch (System.Exception ex)
{
throw ex;
}
strXmlFile = XmlFile;
}

public DataView GetData(string XmlPathNode)
{
//查找数据。返回一个DataView
DataSet ds = new DataSet();
StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
ds.ReadXml(read);
return ds.Tables[0].DefaultView;
}

public void Replace(string XmlPathNode,string Content)
{
//更新节点内容。
objXmlDoc.SelectSingleNode(XmlPathNode).InnerText = Content;
}

public void Delete(string Node)
{
//删除一个节点。
string mainNode = Node.Substring(0,Node.LastIndexOf("/"));
objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
}

public void InsertNode(string MainNode,string ChildNode,string Element,string Content)
{
//插入一节点和此节点的一子节点。
XmlNode objRootNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode);
objRootNode.AppendChild(objChildNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.InnerText = Content;
objChildNode.AppendChild(objElement);
}

public void InsertElement(string MainNode,string Element,string Attrib,string AttribContent,string Content)
{
//插入一个节点,带一属性。
XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.SetAttribute(Attrib,AttribContent);
objElement.InnerText = Content;
objNode.AppendChild(objElement);
}

public void InsertElement(string MainNode,string Element,string Content)
{
//插入一个节点,不带属性。
XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
XmlElement objElement = objXmlDoc.CreateElement(Element);
objElement.InnerText = Content;
objNode.AppendChild(objElement);
}

public void Save()
{
//保存文檔。
try
{
objXmlDoc.Save(strXmlFile);
}
catch (System.Exception ex)
{
throw ex;
}
objXmlDoc = null;
}
}

=========================================================

实例应用:

string strXmlFile = Server.MapPath("TestXml.xml");
XmlControl xmlTool = new XmlControl(strXmlFile);

// 数据显视
// dgList.DataSource = xmlTool.GetData("Book/Authors[ISBN=/"0002/"]");
// dgList.DataBind();

// 更新元素内容
// xmlTool.Replace("Book/Authors[ISBN=/"0002/"]/Content","ppppppp");
// xmlTool.Save();

// 添加一个新节点
// xmlTool.InsertNode("Book","Author","ISBN","0004");
// xmlTool.InsertElement("Book/Author[ISBN=/"0004/"]","Content","aaaaaaaaa");
// xmlTool.InsertElement("Book/Author[ISBN=/"0004/"]","Title","Sex","man","iiiiiiii");
// xmlTool.Save();

// 删除一个指定节点的所有内容和属性
// xmlTool.Delete("Book/Author[ISBN=/"0004/"]");
// xmlTool.Save();

// 删除一个指定节点的子节点
// xmlTool.Delete("Book/Authors[ISBN=/"0003/"]");
// xmlTool.Save();

 

http://www.soft6.com/news/13/134148.html

要对XML文件进行操作,须要声明以下命名空间:
using System.Xml;

一、检查指定XML文件是否存在
System.IO.File.Exists(文件路径及名称);

二、利用C#编程创建 XML文件
我在网上找到了这样的两段代码:
代码一:
XmlDocument xmldoc = new XmlDocument();
XmlNode xmlnode;
XmlElement xmlelem;
XmlElement xmlelem2;
XmlText xmltext;

//加入XML的声明段落
xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
xmlnode.InnerText+=" encoding=/"GB2312/"";
xmldoc.AppendChild(xmlnode);

//加入一个根元素
xmlelem = xmldoc.CreateElement("", "ROOT", "");
xmltext = xmldoc.CreateTextNode("Root Text");
xmlelem.AppendChild(xmltext);
xmldoc.AppendChild(xmlelem);

//加入另外一个元素
xmlelem2 = xmldoc.CreateElement("SampleElement");
xmlelem2 = xmldoc.CreateElement("","SampleElement","");
xmltext = xmldoc.CreateTextNode("The text of the sample element");
xmlelem2.AppendChild(xmltext);
xmldoc.ChildNodes.Item(1).AppendChild(xmlelem2);

//保存创建好的XML文档
try
{
xmldoc.Save("data.xml");
}
catch (Exception f)
{
//显示错误信息
MessageBox.Show(f.Message);
}
//Console.ReadLine();
这段代码在win2003ser+vs2005环境下测试成功,但是XML文件格式很乱,我不知道怎样调整格式,知道的朋友请赐教。

代码二:
string FileName =Application.StartupPath+"//phone.xml";
XmlTextWriter objXmlTextWriter = new XmlTextWriter(FileName,Encoding.Default);

objXmlTextWriter.Formatting = Formatting.Indented;
objXmlTextWriter.Indentation = 6;

objXmlTextWriter.WriteStartDocument();

objXmlTextWriter.WriteStartElement("", "PhoneBook", "");

objXmlTextWriter.WriteStartElement("", "Name", "");
objXmlTextWriter.WriteString("加菲尔德");
objXmlTextWriter.WriteEndElement();

objXmlTextWriter.WriteStartElement("", "Number", "");
objXmlTextWriter.WriteString("5555555");
objXmlTextWriter.WriteEndElement();

objXmlTextWriter.WriteStartElement("", "City", "");
objXmlTextWriter.WriteString("纽约");
objXmlTextWriter.WriteEndElement();

objXmlTextWriter.WriteStartElement("", "DateOfBirth", "");
objXmlTextWriter.WriteString("26/10/1978");
objXmlTextWriter.WriteEndElement();

objXmlTextWriter.WriteEndElement();
objXmlTextWriter.WriteEndDocument();

objXmlTextWriter.Flush();

objXmlTextWriter.Close();
这段代码在win2003ser+vs2005环境下测试通过,出来的效果很好,也比较容易理解,

我一般就是用这段代码创建XML文件。

三、读取、修改XML文件的某个节点的值
string path = "phone.xml";
XmlDocument doc = new XmlDocument();
doc.Load(path);
//读所有节点表
XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
//读取节点值
XmlNode node = doc.SelectSingleNode("/PhoneBook/Name", xnm); //node.InnerText 就是读取出来的值

//修改节点值
node.InnerText="要修改的内容";

//保存修改后的内容
doc.Save(path);

 

你可能感兴趣的:(exception,xml,String,C#,encoding,dataset)