zoukankan      html  css  js  c++  java
  • 在C#.net中如何操作XML

    在C#.net中如何操作XML
    需要添加的命名空间:
    using System.Xml;

    定义几个公共对象:
    XmlDocument xmldoc ;
    XmlNode xmlnode ;
    XmlElement xmlelem ;

    1,创建到服务器同名目录下的xml文件:

    方法一:
    xmldoc = new XmlDocument ( ) ;
    //加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>
    XmlDeclaration xmldecl;
    xmldecl = xmldoc.CreateXmlDeclaration("1.0","gb2312",null);
    xmldoc.AppendChild ( xmldecl);

    //加入一个根元素
    xmlelem = xmldoc.CreateElement ( "" , "Employees" , "" ) ;
    xmldoc.AppendChild ( xmlelem ) ;
    //加入另外一个元素
    for(int i=1;i<3;i++)
    {

    XmlNode root=xmldoc.SelectSingleNode("Employees");//查找<Employees>
    XmlElement xe1=xmldoc.CreateElement("Node");//创建一个<Node>节点
    xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
    xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性

    XmlElement xesub1=xmldoc.CreateElement("title");
    xesub1.InnerText="CS从入门到精通";//设置文本节点
    xe1.AppendChild(xesub1);//添加到<Node>节点中
    XmlElement xesub2=xmldoc.CreateElement("author");
    xesub2.InnerText="候捷";
    xe1.AppendChild(xesub2);
    XmlElement xesub3=xmldoc.CreateElement("price");
    xesub3.InnerText="58.3";
    xe1.AppendChild(xesub3);

    root.AppendChild(xe1);//添加到<Employees>节点中
    }
    //保存创建好的XML文档
    xmldoc.Save ( Server.MapPath("data.xml") ) ;

    //////////////////////////////////////////////////////////////////////////////////////
    结果:在同名目录下生成了名为data.xml的文件,内容如下,
    <?xml version="1.0" encoding="gb2312"?>
    <Employees>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    </Employees>

    方法二:
    XmlTextWriter xmlWriter;
        string strFilename = Server.MapPath("data1.xml") ;

        xmlWriter = new XmlTextWriter(strFilename,Encoding.Default);//创建一个xml文档
        xmlWriter.Formatting = Formatting.Indented;
        xmlWriter.WriteStartDocument();
        xmlWriter.WriteStartElement("Employees");

        xmlWriter.WriteStartElement("Node");
        xmlWriter.WriteAttributeString("genre","李赞红");
        xmlWriter.WriteAttributeString("ISBN","2-3631-4");

        xmlWriter.WriteStartElement("title");
        xmlWriter.WriteString("CS从入门到精通");
        xmlWriter.WriteEndElement();

        xmlWriter.WriteStartElement("author");
        xmlWriter.WriteString("候捷");
        xmlWriter.WriteEndElement();

        xmlWriter.WriteStartElement("price");
        xmlWriter.WriteString("58.3");
        xmlWriter.WriteEndElement();

        xmlWriter.WriteEndElement();

        xmlWriter.Close();
    //////////////////////////////////////////////////////////////////////////////////////
    结果:
    <?xml version="1.0" encoding="gb2312"?>
    <Employees>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    </Employees>

    2,添加一个结点:

    XmlDocument xmlDoc=new XmlDocument();
    xmlDoc.Load(Server.MapPath("data.xml"));
    XmlNode root=xmlDoc.SelectSingleNode("Employees");//查找<Employees>
    XmlElement xe1=xmlDoc.CreateElement("Node");//创建一个<Node>节点
    xe1.SetAttribute("genre","张三");//设置该节点genre属性
    xe1.SetAttribute("ISBN","1-1111-1");//设置该节点ISBN属性

    XmlElement xesub1=xmlDoc.CreateElement("title");
    xesub1.InnerText="C#入门帮助";//设置文本节点
    xe1.AppendChild(xesub1);//添加到<Node>节点中
    XmlElement xesub2=xmlDoc.CreateElement("author");
    xesub2.InnerText="高手";
    xe1.AppendChild(xesub2);
    XmlElement xesub3=xmlDoc.CreateElement("price");
    xesub3.InnerText="158.3";
    xe1.AppendChild(xesub3);

    root.AppendChild(xe1);//添加到<Employees>节点中
    xmlDoc.Save ( Server.MapPath("data.xml") );

    //////////////////////////////////////////////////////////////////////////////////////
    结果:在xml原有的内容里添加了一个结点,内容如下,
    <?xml version="1.0" encoding="gb2312"?>
    <Employees>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    <Node genre="张三" ISBN="1-1111-1">
        <title>C#入门帮助</title>
        <author>高手</author>
        <price>158.3</price>
    </Node>
    </Employees>

    3,修改结点的值(属性和子结点):

    XmlDocument xmlDoc=new XmlDocument();
    xmlDoc.Load( Server.MapPath("data.xml") );

    XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点

    foreach(XmlNode xn in nodeList)//遍历所有子节点
    {
    XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
    if(xe.GetAttribute("genre")=="张三")//如果genre属性值为“张三”
    {
    xe.SetAttribute("genre","update张三");//则修改该属性为“update张三”

    XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
    foreach(XmlNode xn1 in nls)//遍历
    {
    XmlElement xe2=(XmlElement)xn1;//转换类型
    if(xe2.Name=="author")//如果找到
    {
    xe2.InnerText="亚胜";//则修改
    }
    }
    }
    }
    xmlDoc.Save( Server.MapPath("data.xml") );//保存。

    //////////////////////////////////////////////////////////////////////////////////////
    结果:将原来的所有结点的信息都修改了,xml的内容如下,
    <?xml version="1.0" encoding="gb2312"?>
    <Employees>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    <Node genre="update张三" ISBN="1-1111-1">
        <title>C#入门帮助</title>
        <author>亚胜</author>
        <price>158.3</price>
    </Node>
    </Employees>

    4,修改结点(添加结点的属性和添加结点的自结点):
    XmlDocument xmlDoc=new XmlDocument();
    xmlDoc.Load( Server.MapPath("data.xml") );

    XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点

    foreach(XmlNode xn in nodeList)
    {
    XmlElement xe=(XmlElement)xn;
    xe.SetAttribute("test","111111");

    XmlElement xesub=xmlDoc.CreateElement("flag");
    xesub.InnerText="1";
    xe.AppendChild(xesub);
    }
    xmlDoc.Save( Server.MapPath("data.xml") );

    //////////////////////////////////////////////////////////////////////////////////////
    结果:每个结点的属性都添加了一个,子结点也添加了一个,内容如下,
    <?xml version="1.0" encoding="gb2312"?>
    <Employees>
    <Node genre="李赞红" ISBN="2-3631-4" test="111111">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
        <flag>1</flag>
    </Node>
    <Node genre="李赞红" ISBN="2-3631-4" test="111111">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
        <flag>1</flag>
    </Node>
    <Node genre="update张三" ISBN="1-1111-1" test="111111">
        <title>C#入门帮助</title>
        <author>亚胜</author>
        <price>158.3</price>
        <flag>1</flag>
    </Node>
    </Employees>

    5,删除结点中的某一个属性:
    XmlDocument xmlDoc=new XmlDocument();
    xmlDoc.Load( Server.MapPath("data.xml") );
    XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes;
    foreach(XmlNode xn in xnl)
    {
    XmlElement xe=(XmlElement)xn;
    xe.RemoveAttribute("genre");//删除genre属性

    XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
    foreach(XmlNode xn1 in nls)//遍历
    {
    XmlElement xe2=(XmlElement)xn1;//转换类型
    if(xe2.Name=="flag")//如果找到
    {
    xe.RemoveChild(xe2);//则删除
    }
    }
    }
    xmlDoc.Save( Server.MapPath("data.xml") );

    //////////////////////////////////////////////////////////////////////////////////////]
    结果:删除了结点的一个属性和结点的一个子结点,内容如下,
    <?xml version="1.0" encoding="gb2312"?>
    <Employees>
    <Node ISBN="2-3631-4" test="111111">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    <Node ISBN="2-3631-4" test="111111">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    <Node ISBN="1-1111-1" test="111111">
        <title>C#入门帮助</title>
        <author>亚胜</author>
        <price>158.3</price>
    </Node>
    </Employees>

    6,删除结点:
    XmlDocument xmlDoc=new XmlDocument();
    xmlDoc.Load( Server.MapPath("data.xml") );
    XmlNode root=xmlDoc.SelectSingleNode("Employees");
    XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes;
    for(int i=0;i<xnl.Count;i++)
    {
    XmlElement xe=(XmlElement)xnl.Item(i);
    if(xe.GetAttribute("genre")=="张三")
    {
    root.RemoveChild(xe);
    if(i<xnl.Count)i=i-1;
    }
    }
    xmlDoc.Save( Server.MapPath("data.xml") );

    //////////////////////////////////////////////////////////////////////////////////////]
    结果:删除了符合条件的所有结点,原来的内容:

    <?xml version="1.0" encoding="gb2312"?>
    <Employees>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    <Node genre="张三" ISBN="1-1111-1">
        <title>C#入门帮助</title>
        <author>高手</author>
        <price>158.3</price>
    </Node>
    <Node genre="张三" ISBN="1-1111-1">
        <title>C#入门帮助</title>
        <author>高手</author>
        <price>158.3</price>
    </Node>
    </Employees>

    删除后的内容:
    <?xml version="1.0" encoding="gb2312"?>
    <Employees>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    <Node genre="李赞红" ISBN="2-3631-4">
        <title>CS从入门到精通</title>
        <author>候捷</author>
        <price>58.3</price>
    </Node>
    </Employees>

    7,按照文本文件读取xml

    System.IO.StreamReader myFile =new
    System.IO.StreamReader(Server.MapPath("data.xml"),System.Text.Encoding.Default);
    //注意System.Text.Encoding.Default

    string myString = myFile.ReadToEnd();//myString是读出的字符串
    myFile.Close();

    摘自:http://hi.baidu.com/hunterzou/blog/item/4ddc3445ee0d9d3386947315.html

  • 相关阅读:
    Leetcode 15 3Sum
    Leetcode 383 Ransom Note
    用i个点组成高度为不超过j的二叉树的数量。
    配对问题 小于10 1.3.5
    字符矩阵的旋转 镜面对称 1.2.2
    字符串统计 连续的某个字符的数量 1.1.4
    USACO twofive 没理解
    1002 All Roads Lead to Rome
    USACO 5.5.1 求矩形并的周长
    USACO 5.5.2 字符串的最小表示法
  • 原文地址:https://www.cnblogs.com/kinpauln/p/1765303.html
Copyright © 2011-2022 走看看