.net操作xml小结

一、简单介绍

using System.Xml;
//初始化一个xml实例
XmlDocument xml=new XmlDocument();

//导入指定xml文件
xml.Load(path);
xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));

//指定一个节点
XmlNode root=xml.SelectSingleNode("/root");

//获取节点下所有直接子节点
XmlNodeList childlist=root.ChildNodes;

//判断该节点下是否有子节点
root.HasChildNodes;

//获取同名同级节点集合
XmlNodeList nodelist=xml.SelectNodes("/Root/News");

//生成一个新节点
XmlElement node=xml.CreateElement("News");

//将节点加到指定节点下,作为其子节点
root.AppendChild(node);

//将节点加到指定节点下某个子节点前
root.InsertBefore(node,root.ChildeNodes[i]);

//为指定节点的新建属性并赋值
node.SetAttribute("id","11111");

//为指定节点添加子节点
root.AppendChild(node);

//获取指定节点的指定属性值
string id=node.Attributes["id"].Value;

//获取指定节点中的文本
string content=node.InnerText;

//保存XML文件
string path=Server.MapPath("~/file/bookstore.xml");
xml.Save(path);
//or use :xml.Save(HttpContext.Current.Server.MapPath("~/file/bookstore.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();

三、高级应用

/*读取xml数据   两种xml方式*/
<aaa>
     <bb>something</bb>
     <cc>something</cc>
</aaa>
 
<aaa>
    <add key="123" value="321"/>
</aaa>

/*第一种方法*/
DS.ReadXml("your xmlfile name");
Container.DataItem("bb");
Container.DataItem("cc");
DS.ReadXmlSchema("your xmlfile name");
 
/*第二种方法*/
<aaa>
    <add key="123" value="321"/>
</aaa>
如果我要找到123然后取到321应该怎么写呢?
 
using System.XML;
XmlDataDocument xmlDoc = new System.Xml.XmlDataDocument();
xmlDoc.Load(@"c:\Config.xml");
XmlElement elem = xmlDoc.GetElementById("add");
string str = elem.Attributes["value"].Value
 
 
/*第三种方法:  SelectSingleNode  读取两种格式的xml *---/
--------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
       <ConnectionString>Data Source=yf; user id=ctm_dbo;password=123</ConnectionString>            
  </appSettings>
</configuration>
--------------------------------------------------------------------------
XmlDocument doc = new XmlDocument();
doc.Load(strXmlName);
 
    XmlNode node=doc.SelectSingleNode("/configuration/appSettings/ConnectionString");
    if(node!=null)
    {
     string k1=node.Value;    //null
     string k2=node.InnerText;//Data Source=yf; user id=ctm_dbo;password=123
     string k3=node.InnerXml;//Data Source=yf; user id=ctm_dbo;password=123
     node=null;
    }
 
********************************************************************
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
       <add key="ConnectionString" value="Data Source=yf; user id=ctm_dbo;password=123" />            
  </appSettings>
</configuration>
**--------------------------------------------------------------------**
     XmlNode node=doc.SelectSingleNode("/configuration/appSettings/add");
    if(node!=null)
    {
     string k=node.Attributes["key"].Value;
     string v=node.Attributes["value"].Value;
     node=null;
    }
*--------------------------------------------------------------------*
    XmlNode node=doc.SelectSingleNode("/configuration/appSettings/add");
    if(node!=null)
    {
     XmlNodeReader nr=new XmlNodeReader(node);
     nr.MoveToContent();
    //检查当前节点是否是内容节点。如果此节点不是内容节点,则读取器向前跳至下一个内容节点或文件结尾。
     nr.MoveToAttribute("value");
     string s=nr.Value;
     node=null;
    }

C#XML操作类

C#:XML操作类

写的一个XML操作类,包括读取/插入/修改/删除。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;

namespace PuTianCheng
{
    /// <summary>
    /// XmlHelper 的摘要说明
    /// </summary>
    public class XmlHelper
    {
        public XmlHelper()
        {
        }

/// <summary>
        /// 读取数据
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
        /// <returns>string</returns>
        /**************************************************
         * 使用示列:
         * XmlHelper.Read(path, "/Node", "")
         * XmlHelper.Read(path, "/Node/Element[@Attribute='Name']", "Attribute")
         ************************************************/
        public static string Read(string path, string node, string attribute)
        {
            string value = "";
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(path);
                XmlNode xn = doc.SelectSingleNode(node);
                value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);
            }
            catch { }
            return value;
        }

/// <summary>
        /// 插入数据
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="node">节点</param>
        /// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
        /// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>
        /// <param name="value">值</param>
        /// <returns></returns>
        /**************************************************
         * 使用示列:
         * XmlHelper.Insert(path, "/Node", "Element", "", "Value")
         * XmlHelper.Insert(path, "/Node", "Element", "Attribute", "Value")
         * XmlHelper.Insert(path, "/Node", "", "Attribute", "Value")
         ************************************************/
        public static void Insert(string path, string node, string element, string attribute, string value)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(path);
                XmlNode xn = doc.SelectSingleNode(node);
                if (element.Equals(""))
                {
                    if (!attribute.Equals(""))
                    {
                        XmlElement xe = (XmlElement)xn;
                        xe.SetAttribute(attribute, value);
                    }
                }
                else
                {
                    XmlElement xe = doc.CreateElement(element);
                    if (attribute.Equals(""))
                        xe.InnerText = value;
                    else
                        xe.SetAttribute(attribute, value);
                    xn.AppendChild(xe);
                }
                doc.Save(path);
            }
            catch { }
        }

/// <summary>
        /// 修改数据
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>
        /// <param name="value">值</param>
        /// <returns></returns>
        /**************************************************
         * 使用示列:
         * XmlHelper.Insert(path, "/Node", "", "Value")
         * XmlHelper.Insert(path, "/Node", "Attribute", "Value")
         ************************************************/
        public static void Update(string path, string node, string attribute, string value)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(path);
                XmlNode xn = doc.SelectSingleNode(node);
                XmlElement xe = (XmlElement)xn;
                if (attribute.Equals(""))
                    xe.InnerText = value;
                else
                    xe.SetAttribute(attribute, value);
                doc.Save(path);
            }
            catch { }
        }

/// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
        /// <param name="value">值</param>
        /// <returns></returns>
        /**************************************************
         * 使用示列:
         * XmlHelper.Delete(path, "/Node", "")
         * XmlHelper.Delete(path, "/Node", "Attribute")
         ************************************************/
        public static void Delete(string path, string node, string attribute)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(path);
                XmlNode xn = doc.SelectSingleNode(node);
                XmlElement xe = (XmlElement)xn;
                if (attribute.Equals(""))
                    xn.ParentNode.RemoveChild(xn);
                else
                    xe.RemoveAttribute(attribute);
                doc.Save(path);
            }
            catch { }
        }
    }
}

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

XmlFile.xml
<?xml version="1.0" encoding="utf-8"?>
<Root />

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

使用方法:

string xml = Server.MapPath("XmlFile.xml");
//插入元素
//XmlHelper.Insert(xml, "/Root", "Studio", "", "");
//插入元素/属性
//XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "小路工作室");
//XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "丁香鱼工作室");
//XmlHelper.Insert(xml, "/Root/Studio", "Site", "Name", "谱天城工作室");
//XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Master", "", "红尘静思");
//插入属性
//XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='小路工作室']", "", "Url", "http://www.wzlu.com/");
//XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='丁香鱼工作室']", "", "Url", "http://www.luckfish.net/");
//XmlHelper.Insert(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "", "Url", "http://www.putiancheng.com/");
//修改元素值
//XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']/Master", "", "RedDust");
//修改属性值
//XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Url", "http://www.putiancheng.net/");
//XmlHelper.Update(xml, "/Root/Studio/Site[@Name='谱天城工作室']", "Name", "PuTianCheng Studio");
//读取元素值
//Response.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site/Master", "") + "</div>");
//读取属性值
//Response.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site", "Url") + "</div>");
//读取特定属性值
//Response.Write("<div>" + XmlHelper.Read(xml, "/Root/Studio/Site[@Name='丁香鱼工作室']", "Url") + "</div>");
//删除属性
//XmlHelper.Delete(xml, "/Root/Studio/Site[@Name='小路工作室']", "Url");
//删除元素
//XmlHelper.Delete(xml, "/Root/Studio", "");

我用的是一种很笨的方法,但可以帮助初学者了解访问XML节点的过程。 
已知有一个XML文件(bookstore.xml)如下: 
Corets, Eva 
5.95 
1、插入节点 
往节点中插入一个节点:

XmlDocument xmlDoc=new XmlDocument(); 
xmlDoc.Load("bookstore.xml"); 
XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找 
XmlElement xe1=xmlDoc.CreateElement("book");//创建一个节点 
xe1.SetAttribute("genre","李赞红");//设置该节点genre属性 
xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性

XmlElement xesub1=xmlDoc.CreateElement("title"); 
xesub1.InnerText="CS从入门到精通";//设置文本节点 
xe1.AppendChild(xesub1);//添加到节点中 
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);//添加到节点中 
xmlDoc.Save("bookstore.xml");  
结果为: 
Corets, Eva 
5.95 
候捷 
58.3 
2、修改节点: 
将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点的文本修改为“亚胜”。

XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点 
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="亚胜";//则修改 
break;//找到退出来就可以了 


break; 

}

xmlDoc.Save("bookstore.xml");//保存。 
最后结果为: 
Corets, Eva 
5.95 
亚胜 
58.3 
3、删除节点  
节点的genre属性,删除 节点。

XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;

foreach(XmlNode xn in xnl) 

XmlElement xe=(XmlElement)xn; 
if(xe.GetAttribute("genre")=="fantasy") 

xe.RemoveAttribute("genre");//删除genre属性 

else if(xe.GetAttribute("genre")=="update李赞红") 

xe.RemoveAll();//删除该节点的全部内容 


xmlDoc.Save("bookstore.xml");  
最后结果为: 
Corets, Eva 
5.95 
4、显示所有数据。

XmlNode xn=xmlDoc.SelectSingleNode("bookstore");

XmlNodeList xnl=xn.ChildNodes;

foreach(XmlNode xnf in xnl) 

XmlElement xe=(XmlElement)xnf; 
Console.WriteLine(xe.GetAttribute("genre"));//显示属性值 
Console.WriteLine(xe.GetAttribute("ISBN"));

XmlNodeList xnf1=xe.ChildNodes; 
foreach(XmlNode xn2 in xnf1) 

Console.WriteLine(xn2.InnerText);//显示子节点点文本 

}  
loading...  
  
2005-10-3 
一个通过DataSet操作XML的类(源代码)

using System; 
using System.Data; 
using System.Xml; 
using System.Windows.Forms;

//*************************************** 
// 作者: ∮明天去要饭 
// QICQ: 305725744 
// .Net群: 6370988 
// http://blog.csdn.net/kgdiwss 
//***************************************

namespace YSTRP.Common 

///  
/// OperateXmlByDataSet 的摘要说明。 
///  
public class OperateXmlByDataSet 

public OperateXmlByDataSet() 

// 
// TODO: 在此处添加构造函数逻辑 
// 
}

#region GetDataSetByXml 
///  
/// 读取xml直接返回DataSet 
///  
/// xml文件相对路径 
///  
public static DataSet GetDataSetByXml(string strXmlPath) 

try 

DataSet ds = new DataSet(); 
ds.ReadXml(GetXmlFullPath(strXmlPath)); 
if(ds.Tables.Count > 0) 

return ds; 

return null; 

catch(Exception ex) 

System.Windows.Forms.MessageBox.Show(ex.ToString()); 
return null; 


#endregion 
#region GetDataViewByXml 
///  
/// 读取Xml返回一个经排序或筛选后的DataView 
///  
///  
/// 筛选条件,如:"name = 'kgdiwss'" 
/// 排序条件,如:"Id desc" 
///  
public static DataView GetDataViewByXml(string strXmlPath,string strWhere,string strSort) 

try 

DataSet ds = new DataSet(); 
ds.ReadXml(GetXmlFullPath(strXmlPath)); 
DataView dv = new DataView(ds.Tables[0]); 
if(strSort != null) 

dv.Sort = strSort; 

if(strWhere != null) 

dv.RowFilter = strWhere; 

return dv; 

catch(Exception) 

return null; 


#endregion

#region WriteXmlByDataSet 
///  
/// 向Xml文件插入一行数据 
///  
/// xml文件相对路径 
/// 要插入行的列名数组,如:string[] Columns = {"name","IsMarried"}; 
/// 要插入行每列的值数组,如:string[] ColumnValue={"明天去要饭","false"}; 
/// 成功返回true,否则返回false 
public static bool WriteXmlByDataSet(string strXmlPath,string[] Columns,string[] ColumnValue) 

try 

//根据传入的XML路径得到.XSD的路径,两个文件放在同一个目录下 
string strXsdPath = strXmlPath.Substring(0,strXmlPath.IndexOf(".")) + ".xsd";

DataSet ds = new DataSet(); 
//读xml架构,关系到列的数据类型 
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath)); 
ds.ReadXml(GetXmlFullPath(strXmlPath)); 
DataTable dt = ds.Tables[0]; 
//在原来的表格基础上创建新行 
DataRow newRow = dt.NewRow();

//循环给一行中的各个列赋值 
for(int i=0; i< Columns.Length; i++) 

newRow[Columns[i]] = ColumnValue[i]; 

dt.Rows.Add(newRow); 
dt.AcceptChanges(); 
ds.AcceptChanges();

ds.WriteXml(GetXmlFullPath(strXmlPath)); 
return true; 

catch(Exception) 

return false; 


#endregion

#region UpdateXmlRow 
///  
/// 更行符合条件的一条Xml记录 
///  
/// XML文件路径 
/// 列名数组 
/// 列值数组 
/// 条件列名 
/// 条件列值 
///  
public static bool UpdateXmlRow(string strXmlPath,string[] Columns,string[] ColumnValue,string strWhereColumnName,string strWhereColumnValue) 

try 

string strXsdPath = strXmlPath.Substring(0,strXmlPath.IndexOf(".")) + ".xsd";

DataSet ds = new DataSet(); 
//读xml架构,关系到列的数据类型 
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath)); 
ds.ReadXml(GetXmlFullPath(strXmlPath));

//先判断行数 
if(ds.Tables[0].Rows.Count > 0) 

for(int i=0; i< ds.Tables[0].Rows.Count; i++) 

//如果当前记录为符合Where条件的记录 
if(ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue)) 

//循环给找到行的各列赋新值 
for(int j=0; j < Columns.Length; j++) 

ds.Tables[0].Rows[i][Columns[j]] = ColumnValue[j]; 

//更新DataSet 
ds.AcceptChanges(); 
//重新写入XML文件 
ds.WriteXml(GetXmlFullPath(strXmlPath)); 
return true; 

}


return false; 

catch(Exception) 

return false; 


#endregion

#region DeleteXmlRowByIndex 
///  
/// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行 
///  
///  
/// 要删除的行在DataSet中的Index值 
public static bool DeleteXmlRowByIndex(string strXmlPath,int iDeleteRow) 

try 

DataSet ds = new DataSet(); 
ds.ReadXml(GetXmlFullPath(strXmlPath)); 
if(ds.Tables[0].Rows.Count > 0) 

//删除符号条件的行 
ds.Tables[0].Rows[iDeleteRow].Delete(); 

ds.WriteXml(GetXmlFullPath(strXmlPath)); 
return true; 

catch(Exception) 

return false; 


#endregion

#region DeleteXmlRows 
///  
/// 删除strColumn列中值为ColumnValue的行 
///  
/// xml相对路径 
/// 列名 
/// strColumn列中值为ColumnValue的行均会被删除 
///  
public static bool DeleteXmlRows(string strXmlPath,string strColumn,string[] ColumnValue) 

try 

DataSet ds = new DataSet(); 
ds.ReadXml(GetXmlFullPath(strXmlPath));

//先判断行数 
if(ds.Tables[0].Rows.Count > 0) 

//判断行多还是删除的值多,多的for循环放在里面 
if(ColumnValue.Length > ds.Tables[0].Rows.Count) 

for(int i=0; i < ds.Tables[0].Rows.Count; i++) 

for(int j=0; j < ColumnValue.Length; j++) 

if(ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j])) 

ds.Tables[0].Rows[i].Delete(); 




else 

for(int j=0; j < ColumnValue.Length; j++) 

for(int i=0; i < ds.Tables[0].Rows.Count; i++) 

if(ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j])) 

ds.Tables[0].Rows[i].Delete(); 




ds.WriteXml(GetXmlFullPath(strXmlPath)); 

return true; 

catch(Exception) 

return false; 


#endregion

#region DeleteXmlAllRows 
///  
/// 删除所有行 
///  
/// XML路径 
///  
public static bool DeleteXmlAllRows(string strXmlPath) 

try 

DataSet ds = new DataSet(); 
ds.ReadXml(GetXmlFullPath(strXmlPath)); 
//如果记录条数大于0 
if(ds.Tables[0].Rows.Count > 0) 

//移除所有记录 
ds.Tables[0].Rows.Clear(); 

//重新写入,这时XML文件中就只剩根节点了 
ds.WriteXml(GetXmlFullPath(strXmlPath)); 
return true; 

catch(Exception) 

return false; 


#endregion

#region GetXmlFullPath 
///  
/// 返回完整路径 
///  
/// Xml的路径 
///  
public static string GetXmlFullPath(string strPath) 

if(strPath.IndexOf(":") > 0) 

return strPath; 

else 

return Application.StartupPath + strPath; 


#endregion 

}

loading...

2005-10-3 
一个通过DataSet操作XML的类

  这段时间写的项目每次都要用到XML保存一些配置,而每次操作XML都觉得挺麻烦,没有数据库那么顺手。后来发现用DataSet操作XML很方便,而且灵活性比较好,于是写了一个操作XML的类,用来应付一般的XML操作(源码下载附件)。

  1 基本思路 
  其实用DataSet操作XML,归根到底就是对DataSet里的表格,行,列等进行操作,然后用DataSet里的东西重新写到XML中,从而实现编辑XML的目的。如果再配合上.xsd文件的话,那效果更佳。

  2 程序详解 
  (1) XML文件内容 
  本类操作的XML和生成的XML格式是一样的,如下:

http://tempuri.org/xml_xmlDB.xsd">

2 Asp.net程序员 

开发B/S结构程序 
asp.net c#等

建国路XXX

2008-8-31 
false


c#程序员 

开发B/S结构程序 
asp.net c#等

建国路XXX

2008-8-31 
false

  然后点击XML文件右下角的“数据”,即可看到熟悉的表格形式,在表格的任意位置上单击右键选择“创建架构”,将会生成一个.xsd文件,该文件用来定义XML各列的类型。其内容如下(点击查看代码2附件):

http://tempuri.org/xml_xmlDB.xsd"  xmlns:mstns="http://tempuri.org/xml_xmlDB.xsd"xmlns="http://tempuri.org/xml_xmlDB.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"attributeFormDefault="qualified" elementFormDefault="qualified"> msdata:Locale="zh-CN" msdata:EnforceConstaints="False">?msdata:AutoIncrement="true" msdata:AutoIncrementStep="1"msdata:AutoIncrementSeed="1" />

  注意:如果想像数据库一样有一个自动增长的ID字段,则可以这样操作: 
  首先在XML中添加一个元素,这样生成.xsd的时候,就会有一个ID段,在.xsd中选中ID这一列,在右边的属性中,将“AutoIncrementSeed”和“AutoIncrementStep”分别设置为1,这样ID就会从1开始以步长为1自动增长。

  以上代码如果看不懂并不要紧,因为我们可以通过DataSet来生成这种格式的内容。接下来将开始操作XML。

  (2) 处理XML文件路径 
  这里主要是对传入的XML路径进行处理,如果传入的是相对路径,则返回完整路径,如果传入的是完整路径,则不做处理直接返回。方法如下:

#region GetXmlFullPath 
///  
/// 返回完整路径 
///  
/// Xml的路径 
///  
public static string GetXmlFullPath(string strPath) 

//如果路径中含有:符号,则认定为传入的是完整路径  
if(strPath.IndexOf(":") > 0) 

return strPath; 

else 

//返回完整路径 
return System.Web.HttpContext.Current.Server.MapPath(strPath); 


#endregion

  (3) 读取记录 
  读取XML的数据到DataSet中的方法为:

#region GetDataSetByXml 
///  
/// 读取xml直接返回DataSet 
///  
/// xml文件相对路径 
///  
public static DataSet GetDataSetByXml(string strXmlPath) 

try 

DataSet ds = new DataSet(); 
//读取XML到DataSet 
ds.ReadXml(GetXmlFullPath(strXmlPath)); 
if(ds.Tables.Count > 0) 

return ds; 

return null; 

catch(Exception) 

return null; 


#endregion

  以上方法将得到一个DataSet,里面保存的是全部XML记录的信息,而且没有经过任何处理。但很多时候我们需要的只是一些满足条件的记录,这时需要用以下方法得到:

#region GetDataViewByXml 
/// 〈summary〉 
/// 读取Xml返回一个经排序或筛选后的DataView 
/// 〈/summary〉 
/// 〈param name="strXmlPath"〉〈/param〉 
/// 〈param name="strWhere"〉筛选条件,如:"name = 'kgdiwss'"〈/param〉 
/// 〈param name="strSort"〉排序条件,如:"Id desc"〈/param〉 
/// 〈returns〉〈/returns〉 
public static DataView GetDataViewByXml(string strXmlPath,string strWhere,string strSort) 

try 

DataSet ds = new DataSet(); 
ds.ReadXml(GetXmlFullPath(strXmlPath)); 
//创建DataView来完成排序或筛选操作 
DataView dv = new DataView(ds.Tables[0]); 
if(strSort != null) 

//对DataView中的记录进行排序 
dv.Sort = strSort; 

if(strWhere != null) 

//对DataView中的记录进行筛选,找到我们想要的记录 
dv.RowFilter = strWhere; 

return dv; 

catch(Exception) 

return null; 


#endregion

  (4) 插入记录 
  到现在为止我们已经可以随意读取XML中的记录,接下来来实现写入XML的操作,方法如下:

#region WriteXmlByDataSet 
/// 〈summary〉 
/// 向Xml文件插入一行数据 
/// 〈/summary〉 
/// 〈param name="strXmlPath"〉xml文件相对路径〈/param〉 
/// 〈param name="Columns"〉要插入行的列名数组,如:string[] Columns = {"name","IsMarried"};〈/param〉 
/// 〈param name="ColumnValue"〉要插入行每列的值数组,如:string[] ColumnValue={"kgdiwss","false"};〈/param〉 
/// 〈returns〉成功返回true,否则返回false〈/returns〉 
public static bool WriteXmlByDataSet(string strXmlPath,string[] Columns,string[] ColumnValue) 

try 

//根据传入的XML路径得到.XSD的路径,两个文件放在同一个目录下string strXsdPath = strXmlPath.Substring(0,strXmlPath.IndexOf(".")) + ".xsd";

DataSet ds = new DataSet(); 
//读xml架构,关系到列的数据类型 
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath)); 
ds.ReadXml(GetXmlFullPath(strXmlPath)); 
DataTable dt = ds.Tables[0]; 
//在原来的表格基础上创建新行 
DataRow newRow = dt.NewRow();

//循环给 一行中的各个列赋值 
for(int i=0; i〈 Columns.Length; i++) 

newRow[Columns[i]] = ColumnValue[i]; 

dt.Rows.Add(newRow); 
dt.AcceptChanges(); 
ds.AcceptChanges(); 
ds.WriteXml(GetXmlFullPath(strXmlPath)); 
return true; 

catch(Exception) 

return false; 


#endregion

  可能有的朋友不知道怎么用这个方法插入数据,在后面我将用实例介绍。

  (5) 修改记录 
  修改记录的方法要传入的参数相对较多,因为修改记录需要先定位到具体哪一条记录,再修改指定列的值,以下为修改XML的方法:

#region UpdateXmlRow 
/// 〈summary〉 
/// 更行符合条件的一条Xml记录 
/// 〈/summary〉 
/// 〈param name="strXmlPath"〉XML文件路径〈/param〉 
/// 〈param name="Columns"〉列名数组〈/param〉 
/// 〈param name="ColumnValue"〉列值数组〈/param〉 
/// 〈param name="strWhereColumnName"〉条件列名〈/param〉 
/// 〈param name="strWhereColumnValue"〉条件列值〈/param〉 
/// 〈returns〉〈/returns〉 
public static bool UpdateXmlRow(string strXmlPath,string[] Columns,string[] ColumnValue,string strWhereColumnName,string strWhereColumnValue) 

try 

//同上一方法 
string strXsdPath = strXmlPath.Substring(0,strXmlPath.IndexOf(".")) + ".xsd";

DataSet ds = new DataSet(); 
//读xml架构,关系到列的数据类型 
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath)); 
ds.ReadXml(GetXmlFullPath(strXmlPath));

//先判断行数 
if(ds.Tables[0].Rows.Count 〉 0) 

for(int i=0; i〈 ds.Tables[0].Rows.Count; i++) 

//如果当前记录为符合Where条件的记录if(ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue)) 

//循环给找到行的各列赋新值 
for(int j=0; j 〈 Columns.Length; j++) 

ds.Tables[0].Rows[i][Columns[j]] = ColumnValue[j]; 

//更新DataSet 
ds.AcceptChanges(); 
//重新写入XML文件 
ds.WriteXml(GetXmlFullPath(strXmlPath)); 
return true; 

}


return false; 

catch(Exception) 

return false; 


#endregion

  (6) 删除记录 
  为了方便,删除记录提供了三个方法,一个可以删除所有记录,一个删除符合条件的行,还有一个删除指定Index值的行,该Index值和记录在Data 
  Set中的Index值对应。删除所有记录的方法为:

#region DeleteXmlAllRows 
/// 〈summary〉 
/// 删除所有行 
/// 〈/summary〉 
/// 〈param name="strXmlPath"〉XML路径〈/param〉 
/// 〈returns〉〈/returns〉 
public static bool DeleteXmlAllRows(string strXmlPath) 

try 

DataSet ds = new DataSet(); 
ds.ReadXml(GetXmlFullPath(strXmlPath)); 
//如果记录条数大于0 
if(ds.Tables[0].Rows.Count 〉 0) 

//移除所有记录 
ds.Tables[0].Rows.Clear(); 

//重新写入,这时XML文件中就只剩根节点了 
ds.WriteXml(GetXmlFullPath(strXmlPath)); 
return true; 

catch(Exception) 

return false; 


#endregion 
删除指定Index值的行的方法为: 
#region DeleteXmlRowByIndex 
/// 〈summary〉 
/// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行 
/// 〈/summary〉 
/// 〈param name="strXmlPath"〉〈/param〉 
/// 〈param name="iDeleteRow"〉要删除的行在DataSet中的Index值〈/param〉 
public static bool DeleteXmlRowByIndex(string strXmlPath,int iDeleteRow) 

try 

DataSet ds = new DataSet(); 
ds.ReadXml(GetXmlFullPath(strXmlPath)); 
if(ds.Tables[0].Rows.Count 〉 0) 

//删除符号条件的行 
ds.Tables[0].Rows[iDeleteRow].Delete(); 

ds.WriteXml(GetXmlFullPath(strXmlPath)); 
return true; 

catch(Exception) 

return false; 


#endregion

  这里说一下提供此方法的原因,有的时候将XML的内容读到DataSet,然后绑定到DataGrid后,由于DataGrid中只有一个模板列,而模板列里又套了表格等许多控件,这就使得我们可能无法得到记录对应的ID值,这个时候就可以先得到记录的Index值(第一行为0,第二行为1,以此类推),然后将该Index值传到方法中,就可以将该记录删掉。

  注意:使用该方法的时候,绑定到DataGrid上的DataSet和删除时用的DataSet要为同一个,也就是说Index要相同,不能有排序,不然会误将记录。

  有时候我们需要删除符合条件的多行,这个时候可以用以下方法实现:

#region DeleteXmlRows 
/// 〈summary〉 
/// 删除strColumn列中值为ColumnValue的行 
/// 〈/summary〉 
/// 〈param name="strXmlPath"〉xml相对路径〈/param〉 
/// 〈param name="strColumn"〉列名〈/param〉 
/// 〈param name="ColumnValue"〉strColumn列中值为ColumnValue的行均会被删除〈/param〉 
/// 〈returns〉〈/returns〉 
public static bool DeleteXmlRows(string strXmlPath,string strColumn,string[] ColumnValue) 

try 

DataSet ds = new DataSet(); 
ds.ReadXml(GetXmlFullPath(strXmlPath));

//先判断行数 
if(ds.Tables[0].Rows.Count 〉 0) 

//判断行多还是删除的值多,多的for循环放在里面 
if(ColumnValue.Length 〉 ds.Tables[0].Rows.Count) 

for(int i=0; i 〈 ds.Tables[0].Rows.Count; i++) 

for(int j=0; j 〈 ColumnValue.Length; j++) 

//找到符合条件的行if(ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j])) 

//删除行 
ds.Tables[0].Rows[i].Delete(); 




else 

for(int j=0; j 〈 ColumnValue.Length; j++) 

for(int i=0; i 〈 ds.Tables[0].Rows.Count; i++) 

//找到符合条件的行if(ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j])) 

//删除行 
ds.Tables[0].Rows[i].Delete(); 




ds.WriteXml(GetXmlFullPath(strXmlPath)); 

return true; 

catch(Exception) 

return false; 


#endregion

3实例解析

  (7) 读取XML 
  以下代码读取到一个没有排序和筛选的DataSet。 
DataGrid1.DataSource = OperateXmlByDataSet.GetDataSetByXml(@"xml/xml_xmlDB.xml"); 
DataGrid1.DataBind(); 
以下代码读到的数据是经过筛选和排序的: 
DataGrid1.DataSource = OperateXmlByDataSet.GetDataViewByXml( 
@"xml/xml_xmlDB.xml", //XML文件路径 
"name = 'Asp.net'", //条件:name列值为Asp.net 
"peopleNum desc"); //按peopleNum列降序排列 
DataGrid1.DataBind();

  (8) 添加记录 
  以下代码向XML文件中添加了一条记录,同时给7个列赋值: 
bool b; 
b = OperateXmlByDataSet.WriteXmlByDataSet( 
@"xml/xml_xmlDB.xml", //XML文件地址 
new string[]{ 
"name", //姓名字段 
"peopleNum", //人数字段 
"address", //地址字段 
"description", //描述字段 
"require", //需求字段 
"deadLine", //结束时间字段 
"IsMarried" //婚否字段 
}, 
new string[]{ 
"Asp.net程序员", //姓名字段值 
"2", //人数字段值 
"建国路", //地址字段值 
"B/S结构程序", //描述字段值 
"asp.net c#等", //需求字段值 
DateTime.Now.ToShortDateString(), //结束时间字段值 
"false" //婚否字段值 
});

  如果b返回值为true,表示添加成功,否则表示添加失败。以上的写法我用了些偷懒的方法,比如我把数组直接放在参数,而没有另外申明,事实上你可以另外申明一个数组,然后再传到方法中。 
  请注意字段在数组中的位置和值在数组中的位置的对应关系。

  (9) 修改记录 
  以下代码将找到peopleNum列值为3的行,然后将行的name、peopleNum、、description和IsMarried四个字段的值分别更新成kgdiwss、10、描述、true。 
bool b; 
b = OperateXmlByDataSet.UpdateXmlRow( 
@"xml/xml_xmlDB.xml", 
new string[]{"name","peopleNum","description","IsMarried"}, 
new string[]{"kgdiwss","10","描述","true"}, 
"peopleNum", 
"3");

  返回true表示修改成功,否则表示修改失败。 
  请特别注意,字段类型为逻辑型时,赋值用的是true和false,而不是0和1。

  (10) 删除记录 
  以下代码实现删除name列值为数组中的值的行。 
bool b; 
b = OperateXmlByDataSet.DeleteXmlRows( 
@"xml/xml_xmlDB.xml", //XML文件路径 
"name", //条件列 
new string[]{ 
"值1", //条件值1 
"值2", //条件值2 
"值3" //条件值3 
});

  上面代码执行成功后,name列值为值1、值2、值3的行将被删除。 
  删除成功返回true,否则返回false。 
  另外两种删除的方法用法比较简单,这里就不介绍了。

  以上就是操作XML的所有方法,相信可以满足很大一部份的使用了。然而,如果XML中的数据量比较大的话,使用以上方法效率可能不高,但话又说回来,如果数据量比较大的话,还是选择数据库比较好。

转载于:https://www.cnblogs.com/islkeng/archive/2012/09/14/2685172.html

.net操作xml小结 (转)相关推荐

  1. C#操作XML小结_转载

    using System.Xml; //初始化一个xml实例 XmlDocument xml=new XmlDocument(); //导入指定xml文件 xml.Load(path); xml.Lo ...

  2. C#.Net中操作XML方法一

    我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种运行用户对自己的标记语言进行定义的源语言.因为结构好,并且容易理解,就好比一棵树,层次关系分明,因此也常常把一些数据存储到XML文 ...

  3. 使用Dom4j操作XML数据

    --------------siwuxie095 dom4j 是一个非常优秀的 Java XML 的 API, 用来读写 XML 文件 和操作 XML 数据 特点:性能优异.功能强大.极端易用 dom ...

  4. 在C#.net中如何操作XML

    在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEle ...

  5. ActionScript 3操作XML 详解

    AS3引入了E4X ,它是根据ECMAScript标准处理XML 数据的全新机制.这使得程序员在程序中无缝地操作XML.在AS3中可以使用XML字面值将XML数据直接写入代码,该字面值将被自动解析. ...

  6. 我错了,有个叫 SelectSingleNode 的可以操作 xml

    我错了,有个叫 SelectSingleNode 的可以操作 xml http://blog.csdn.net/wf520pb/article/details/2644549 ------------ ...

  7. android xml文件操作类,android操作xml

    android操作xml封装后的类,包括创建xml和读xml. public class XmlParserUtil { //创建xml文件 public static void createXmlF ...

  8. c#操作xml实例 2009-03-13 20:00

    在C#.net中如何操作XML 需要添加的命名空间: using System.Xml; 定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlEle ...

  9. C#操作XML总结1

    C#操作XML总结1 网上很多C#操作XML的文章,但是都是东拼西凑,把简单的问题复杂化,不参考罢了.如若照搬硬套,不但达不到目标,反而浪费时间.原本以前做过操作XML的程序,但是忘了,所以今天下午就 ...

最新文章

  1. MyBaties学习记录
  2. js和Java分别正则匹配小数点后多余的0
  3. DotNetBar 中 SuperGridControl 加载数据、获取数据、设置样式
  4. python常用内置函数可以操作字符串_Python常用内置函数(二)
  5. 日志库EasyLogging++学习系列(3)—— 配置功能
  6. POJ_2593最大两不想交子段和问题
  7. java 2_Java(二)
  8. Android-入门学习笔记-图片和外观改善
  9. vue把数据导出为Excel表格的方法
  10. 最新Jrebel激活码,Jrebel激活激活服务,Jrebel激活码,Jrebel破解
  11. linux sed替换行,shell - 使用Sed替换包含字符串的整行
  12. 进程隐藏博文 hook
  13. torch.cuda
  14. 腾讯互娱旗下工作室一览
  15. 国内免费无限制使用的ChatGPT平台
  16. 宏基aspire 4920 win10录音没有声音解决方法
  17. 5G uRLLC技术及其与TSN的融合
  18. windows server 2012 R2 安装桌面体验,安装ActiveSync时提示缺少Windows组件
  19. IBM Storwize V5000资源管理柜
  20. 计算机教师继续教育心得,教师继续教育学习心得体会范文(精选8篇)

热门文章

  1. VUE 2 无法监听数组和对象的某些变化
  2. java 实现nfa的化简_NFA的实现
  3. python 状态机_Python 状态机
  4. python输入list_python学习(list增删改查、及常用方法)
  5. ad中那个快捷键是重复上一部_Excel中的F4快捷键用的好,告别加班没烦恼!
  6. python中的文件怎么处理_python 中有关文件处理
  7. docker+mysql+授权_docker安装mysql, 授权远程连接
  8. go mysql rows.next_Go基础之--操作Mysql(二)
  9. 光纤熔接盒盘线方法_唐品小课堂光纤色谱
  10. 在chrome里查询修改html代码,我需要在网页中直接编辑CSS?打开Web代码检查器