C#操作xml增删改查.docx
《C#操作xml增删改查.docx》由会员分享,可在线阅读,更多相关《C#操作xml增删改查.docx(14页珍藏版)》请在冰豆网上搜索。
C#操作xml增删改查
c#操作xml
同样是增,删,改,查四种操作。
现在我们就详细介绍一下增和删两种操作。
看下面的一个xml示例:
xmlversion="1.0"encoding="utf-8"?
>
456
5465
jjjjj
3456789
xml的每个节点分为节点名称,节点值和属性三类,如:
member节点:
id为其一个属性,menber为其节点名称。
再如:
name节点456为其节点值。
如果我们需要增加一个节点可以调用一下几个方法:
///
///在根节点下添加父节点
///
publicstaticvoidAddParentNode(stringxmlPath,stringparentNode)
{
XmlDocumentxdoc=newXmlDocument();
xdoc.Load(xmlPath);
//创建一个新的menber节点并将它添加到根节点下
XmlElementNode=xdoc.CreateElement(parentNode);
xdoc.DocumentElement.PrependChild(Node);
xdoc.Save(xmlPath);
}
#region插入一节点,带一属性
///
///插入一节点,带一属性
///
///Xml文档路径
///当前节点路径
///新节点
///属性名称
///属性值
///新节点值
publicstaticvoidXmlInsertElement(stringxmlPath,stringMainNode,stringElement,stringAttrib,stringAttribContent,stringContent)
{
XmlDocumentobjXmlDoc=newXmlDocument();
objXmlDoc.Load(xmlPath);
XmlNodeobjNode=objXmlDoc.SelectSingleNode(MainNode);
XmlElementobjElement=objXmlDoc.CreateElement(Element);
objElement.SetAttribute(Attrib,AttribContent);
objElement.InnerText=Content;
objNode.AppendChild(objElement);
objXmlDoc.Save(xmlPath);
}
#endregion
#region插入一节点不带属性
publicstaticvoidXmlInsertElement(stringxmlPath,stringMainNode,stringElement,stringContent)
{
XmlDocumentobjXmlDoc=newXmlDocument();
objXmlDoc.Load(xmlPath);
XmlNodeobjNode=objXmlDoc.SelectSingleNode(MainNode);
XmlElementobjElement=objXmlDoc.CreateElement(Element);
objElement.InnerText=Content;
objNode.AppendChild(objElement);
objXmlDoc.Save(xmlPath);
}
#endregion
#region向一个节点添加属性
///
///向一个节点添加属性
///
///xml文件路径
///节点路径
///要添加的节点属性的名称
///要添加属性的值
publicstaticvoidAddAttribute(stringxmlPath,stringNodePath,stringNodeAttribute1,stringNodeAttributeText)
{
XmlDocumentobjXmlDoc=newXmlDocument();
objXmlDoc.Load(xmlPath);
XmlAttributenodeAttribute=objXmlDoc.CreateAttribute(NodeAttribute1);
XmlNodenodePath=objXmlDoc.SelectSingleNode(NodePath);
nodePath.Attributes.Append(nodeAttribute);
XmlElementxe=(XmlElement)nodePath;
xe.SetAttribute(NodeAttribute1,NodeAttributeText);
objXmlDoc.Save(xmlPath);
}
#endregion
如想要加入一个member的父节点,属性id值为7你可以这样来做:
//取得xml文件的路径
stringxmlPath=Server.MapPath("~/test.xml");
stringparentNode="member";
//在根节点下添加父节点member
XmlHelper.AddParentNode(xmlPath,parentNode);
//刚添加的member节点添加一
XmlHelper.AddAttribute(xmlPath,"phonebook/member","id","7");
则xml文件就会变成这样
xmlversion="1.0"encoding="utf-8"?
>
456
5465
jjjjj
3456789
向新添加的节点member(id=7)的节点下加入节点名称为qq,值为123456的新节点,你可以这样做
XmlHelper.XmlInsertElement(xmlPath,"//member[@id="7"]","qq","123456");
则输出的xml为:
xmlversion="1.0"encoding="utf-8"?
>
456
5465
jjjjj
3456789
123456
增加节点我们就介绍到这里,只要你基本掌握了xpath语法,融会贯通,就可以利用上面几个公用方法对xml文件进行增加操作
下面我们介绍一下删除操作,删除共有两种,一是删除某一节点,一种是删除某一节点的属性。
可以使用的方法如下:
///
///删除XML节点和此节点下的子节点
///
///xml文档路径
///节点路径
publicstaticvoidXmlNodeDelete(stringxmlPath,stringNode)
{
XmlDocumentobjXmlDoc=newXmlDocument();
objXmlDoc.Load(xmlPath);
stringmainNode=Node.Substring(0,Node.LastIndexOf("/"));
objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
objXmlDoc.Save(xmlPath);
}
#region删除一个节点的属性
///
///删除一个节点的属性
///
///文件路径
///节点路径(xpath)
///属性名称
publicstaticvoidxmlnNodeAttributeDel(stringxmlPath,stringNodePath,stringNodeAttribute)
{
XmlDocumentobjXmlDoc=newXmlDocument();
objXmlDoc.Load(xmlPath);
XmlNodenodePath=objXmlDoc.SelectSingleNode(NodePath);
XmlElementxe=(XmlElement)nodePath;
xe.RemoveAttribute(NodeAttribute);
objXmlDoc.Save(xmlPath);
}
#endregion
如要删除属性id值为5的节点(包括其子节点),我们可以这样做:
stringxmlPath=Server.MapPath("~/test.xml");
XmlHelper.XmlNodeDelete(xmlPath,"phonebook/member[@id="5"]");
这时xml文件将变为:
xmlversion="1.0"encoding="utf-8"?
>
456
5465
jjjjj
3456789
123456
假如我们向id=6的父节点下子节点qq节点加一属性sex值为‘男‘,从上面可以看出这是可以可以做到的,则xml文件就变为:
xmlversion="1.0"encoding="utf-8"?
>
456
5465
jjjjj
3456789
123456
假如我们要删除sex=“男”,我们可以这样做:
XmlHelper.xmlnNodeAttributeDel(xmlPath,"//member[qq='5465']/qq",'sex');
//也可以
XmlHelper.xmlnNodeAttributeDel(xmlPath,"//member[@id='6']/qq",'sex');
如何更改和读取xml特定节点。
我们依然以上次的xml文件为例:
xmlversion="1.0"encoding="utf-8"?
>
456
5465
jjjjj
3456789
首先是更改操作,它也包含两个方面即更改指定节点的值和指定节点的某一属性值,我们可以使用的方法如下:
///
///更新Xml节点内容
///
///xml路径
///要更换内容的节点:
节点路径根节点/父节点/当前节点
///新的内容
publicstaticvoidXmlNodeReplace(stringxmlPath,stringNode,stringContent)
{
XmlDocumentobjXmlDoc=newXmlDocument();
objXmlDoc.Load(xmlPath);
objXmlDoc.SelectSingleNode(Node).InnerText=Content;
objXmlDoc.Save(xmlPath);
}
///
///更改节点的属性值
///
///文件路径
///节点路径
///要更改的节点属性的名称
///更改的属性值
publicstaticvoidXmlAttributeEide(stringxmlPath,stringNodePath,stringNodeAttribute1,stringNodeAttributeText)
{
XmlDocumentobjXmlDoc=newXmlDocument();
objXmlDoc.Load(xmlPath);
XmlNodenodePath=objXmlDoc.SelectSingleNode(NodePath);
XmlElementxe=(XmlElement)nodePath;
xe.SetAttribute(NodeAttribute1,NodeAttributeText);
objXmlDoc.Save(xmlPath);
}
第一个方面,加入我们要更改menber(id=6)下节点name的值我们可以这样做:
stringxmlPath=Server.MapPath("~/test.xml");
XmlHelper.XmlNodeReplace(xmlPath,"//member[@id=6]/name","hya");
也可以
stringxmlPath=Server.MapPath("~/test.xml");
XmlHelper.XmlNodeReplace(xmlPath,"//member[qq='5465']/name","hya");
总之你能够用xpath语法找到所要更改的节点即可。
更改属性值也一样,在这不在赘述!
查询正如对数据库操作查询考查你对sql的熟练程度一样,对xml的查询也就是考查你对xpath了解多少。
在这里我只是列出几个有限的调用方法,相信从上面的介绍中你可以大致对xpath有了一定的了解:
#region读取XML到DataSet
///
///功能:
读取XML到DataSet中
///
///xml路径
///DataSet
publicstaticDataSetGetXml(stringXmlPath)
{
DataSetds=newDataSet();
ds.ReadXml(@XmlPath);
returnds;
}
#endregion
#region读取xml文档并返回一个节点
///
///读取xml文档并返回一个节点:
适用于一级节点
///
///xml路径
///节点
///
publicstaticstringReadXmlReturnNode(stringXmlPath,stringNode)
{
XmlDocumentdocXml=newXmlDocument();
docXml.Load(@XmlPath);
XmlNodeListxn=docXml.GetElementsByTagName(Node);
returnxn.Item(0).InnerText.ToString();
}
#endregion
#region查找数据,返回一个DataSet
///
///查找数据,返回当前节点的所有下级节点,填充到一个DataSet中
///
///xml文档路径
///节点的路径:
根节点/父节点/当前节点
///
publicstaticDataSetGetXmlData(stringxmlPath,stringXmlPathNode)
{
XmlDocumentobjXmlDoc=newXmlDocument();
objXmlDoc.Load(xmlPath);
DataSetds=newDataSet();
StringReaderread=newStringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
ds.ReadXml(read);
returnds;
}
#region读取指定节点的指定属性值
///
///功能:
///读取指定节点的指定属性值
///
///节点路径
///此节点的属性
///
publicstringGetXmlNodeAttribute(stringxmlPath,stringstrNode,stringstrAttribute)
{
stringstrReturn="";
xmlDoc.Load(xmlPath);
try
{
//根据指定路径获取节点
XmlNodexmlNode=xmlDoc.SelectSingleNode(strNode);
//获取节点的属性,并循环取出需要的属性值
XmlAttributeCollectionxmlAttr=xmlNode.Attributes;
for(inti=0;i{
if(xmlAttr.Item(i).Name==strAttribute)
strReturn=xmlAttr.Item(i).Value;
}
}
catch(XmlExceptionxmle)
{
throwxmle;
}
returnstrReturn;
}
#endregion
#region 读取指定节点的值
///
///功能:
///读取指定节点的值
///
///节点名称(xpath)
///
publicstringGetXmlNodeValue(stringxmlPath,stringstrNode)
{
stringstrReturn=String.Empty;
xmlDoc.Load(xmlPath);
try
{
//根据路径获取节点
XmlNodexmlNode=xmlDoc.SelectSingleNode(strNode);
strReturn=xmlNode.InnerT