一、概述:
.net对于XML操作已经有比较多的代码在网上流传,但是能用的没有几个。所以在此专门做成了一个实例,以便后来人。下载地址在文章底部
本实例围绕以下XML的格式为基础。我相信只要学会了这篇文章,其它的只是大同小异。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0">
<channel>
<title>幸凡学习网</title>
<description>是一个免费提供代码分享的一个网站,专注于.net、SEO、Div+css、javascript、SEO、经典电影,免费视频教程,欢迎光临</description>
<language>zh_CN</language>
<link>http://www.86y.org</link>
<image>http://www.86y.org/images/logo.png</image>
<author>幸凡</author>
<item id="5">
<title>777777</title>
<description><![CDATA[ 详细描述3 ]]> </description>
<pubDate>2017/9/1 11:36:12</pubDate>
<link>http://www.86y.org/art_detail.aspx?id=5</link>
</item>
<item id="4">
<title>js操作cookie,有效期至当天晚上23点59分59秒的cookie</title>
<description><![CDATA[ 今天碰到一个需要设置cookies当天23:59:59时失效的效果...]]></description>
<pubDate>2016/9/1 11:38:11</pubDate>
<link> http://www.86y.org/art_detail.aspx?id=801 </link>
</item>
<item id="3">
<title>js => 今天发现的一个新的js函数写法</title>
<description><![CDATA[ 今天在网上参观到一个写法,返回字符串每个字母的个数var]]></description>
<pubDate>2016/8/27 9:33:12</pubDate>
<link> http://www.86y.org/art_detail.aspx?id=800 </link>
</item>
<item id="2">
<title>完美 全兼容 解决 文字两端对齐 justify</title>
<description><![CDATA[ text-align:justify;所有浏览器都支持,text-justify之类]]></description>
<pubDate>2016/8/26 11:05:43</pubDate>
<link> http://www.86y.org/art_detail.aspx?id=799 </link>
</item>
<item id="1">
<title>留一点专注的时间给孩子</title>
<description><![CDATA[ 每天早上五点半,我一般都会自动醒来,起床,洗漱,坐在]]></description>
<pubDate>2016/8/24 14:46:24</pubDate>
<link> http://www.86y.org/art_detail.aspx?id=798 </link>
</item>
</channel>
</rss>
二、核心代码:
1、查询XML
/// <summary>
/// 显示所有XML
/// </summary>
private void showIt()
{
LoadXml();
XmlNode xn = xmlDoc.SelectSingleNode("rss//channel");
string result = "";
XmlNodeList xnl = xn.ChildNodes;
if (xnl.Count > 1)
{
foreach (XmlNode xn2 in xnl)
{
if (xn2.Name == "item")
{
XmlElement sans = (XmlElement)xn2;
XmlNodeList san3 = sans.ChildNodes;
if (san3.Count > 1)
{
foreach (XmlNode sanss in san3)
{
if (sanss.Name == "title")
result += sanss.InnerText + "<br />";
}
}
}
}
}
Response.Write(result);
}
2、增加一条XML记录
/// <summary>
/// 插入XML
/// </summary>
private void addIt() {
LoadXml();
XmlNode xmldocSelect = xmlDoc.SelectSingleNode("rss//channel");
//xmldocSelect = (XmlNode)(xmldocSelect.SelectSingleNode("channel"));
XmlElement el = xmlDoc.CreateElement("item"); //添加person节点
el.SetAttribute("id", "5");
XmlElement xesub1 = xmlDoc.CreateElement("title"); //添加person节点的里的节点
xesub1.InnerText = "123";//设置文本节点
el.AppendChild(xesub1);
XmlElement xesub2 = xmlDoc.CreateElement("description");
xesub2.InnerXml = "<![CDATA[ 详细描述 ]]> ";//设置文本节点
el.AppendChild(xesub2);
XmlElement xesub3 = xmlDoc.CreateElement("pubDate");
xesub3.InnerText = "2017/8/31 16:36:12";//设置文本节点
el.AppendChild(xesub3);
XmlElement xesub4 = xmlDoc.CreateElement("link");
xesub4.InnerText = "http://www.86y.org/art_detail.aspx?id=837";//设置文本节点
el.AppendChild(xesub4);
//获取需要插入前的对象 (我获取的是第一个item)
XmlNodeList dss = xmldocSelect.ChildNodes;
XmlNode xmlpre =(XmlNode) null;
foreach (XmlNode xn2 in dss)
{
if (xn2.Name == "item")
{
xmlpre = xn2;
break;
}
}
xmldocSelect.InsertBefore(el, xmlpre);
xmlDoc.Save(Server.MapPath("~/download/Rss.xml"));
}
3、修改一条XML记录
/// <summary>
/// 修改XML某一字段
/// </summary>
private void UpdateElement()
{
LoadXml();
XmlNode nodeList = xmlDoc.SelectSingleNode("rss//channel");
//nodeList = (XmlNode)(nodeList.SelectSingleNode("channel"));
foreach (XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
if (xe.GetAttribute("id") == "5" && xe.Name== "item")//如果name属性值为“风云”
{
//如果下面有子节点在下走
XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach (XmlNode xn1 in nls)//遍历
{
XmlElement xe2 = (XmlElement)xn1;//转换类型
if (xe2.Name == "title")//如果找到
{
xe2.InnerText = "777777";//则修改
}
if (xe2.Name == "description")//如果找到
{
xe2.InnerXml = "<![CDATA[ 详细描述3 ]]> ";//则修改
}
if (xe2.Name == "pubDate")//如果找到
{
xe2.InnerText = "2017/9/1 11:36:12";//则修改
}
if (xe2.Name == "link")//如果找到
{
xe2.InnerText = "http://www.86y.org/art_detail.aspx?id=5";//则修改
}
}
break;
}
}
xmlDoc.Save(Server.MapPath("~/download/Rss.xml")); //保存
}
4、删除一条XML记录
/// <summary>
/// 删除某一节点
/// </summary>
private void deleteNode()
{
LoadXml();
XmlNode xnl = xmlDoc.SelectSingleNode("rss//channel");
XmlNodeList xnl2 = xnl.ChildNodes;
foreach (XmlNode xn in xnl2)
{
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("id") == "5" && xe.Name=="item")
{
//Response.Write(xe.GetAttribute("id"));
//xe.RemoveAttribute("name");//删除name属性
xe.ParentNode.RemoveChild(xe);//删除该节点的全部内容
break;
}
}
xmlDoc.Save(Server.MapPath("~/download/Rss.xml")); //保存
}
三、结语:
本实例纯属操作,逻辑没有控制,需要自己调整。
下载地址:链接:http://pan.baidu.com/s/1geNrRFX 密码:5svt