c#操作XML读XML写XML更新删除节点与dataset结合等Word文档格式.docx
- 文档编号:8133260
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:26
- 大小:23.03KB
c#操作XML读XML写XML更新删除节点与dataset结合等Word文档格式.docx
《c#操作XML读XML写XML更新删除节点与dataset结合等Word文档格式.docx》由会员分享,可在线阅读,更多相关《c#操作XML读XML写XML更新删除节点与dataset结合等Word文档格式.docx(26页珍藏版)》请在冰点文库上搜索。
//设置文本节点
xe1.AppendChild(xesub1);
//添加到节点中
xesub2=xmlDoc.CreateElement("
author"
xesub2.InnerText="
候捷"
xe1.AppendChild(xesub2);
xesub3=xmlDoc.CreateElement("
price"
xesub3.InnerText="
58.3"
xe1.AppendChild(xesub3);
root.AppendChild(xe1);
xmlDoc.Save("
结果为:
候捷
58.3
2、修改节点:
将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点的文本修改为“亚胜”。
XmlNodeList
nodeList=xmlDoc.SelectSingleNode("
).ChildNodes;
//获取bookstore节点的所有子节点
foreach(XmlNode
xn
in
nodeList)//遍历所有子节点
{
xe=(XmlElement)xn;
//将子节点类型转换为XmlElement类型
if(xe.GetAttribute("
)=="
)//如果genre属性值为“李赞红”
xe.SetAttribute("
update李赞红"
//则修改该属性为“update李赞红”
nls=xe.ChildNodes;
//继续获取xe子节点的所有子节点
xn1
nls)//遍历
xe2=(XmlElement)xn1;
//转换类型
if(xe2.Name=="
)//如果找到
xe2.InnerText="
亚胜"
//则修改
break;
//找到退出来就可以了
}
//保存。
最后结果为:
亚胜
3、删除节点
节点的genre属性,删除
节点。
xnl=xmlDoc.SelectSingleNode("
xnl)
fantasy"
)
xe.RemoveAttribute("
//删除genre属性
else
xe.RemoveAll();
//删除该节点的全部内容
4、显示所有数据。
xn=xmlDoc.SelectSingleNode("
xnl=xn.ChildNodes;
xnf
xe=(XmlElement)xnf;
Console.WriteLine(xe.GetAttribute("
));
//显示属性值
xnf1=xe.ChildNodes;
xn2
xnf1)
Console.WriteLine(xn2.InnerText);
//显示子节点点文本
2005-10-3
一个通过DataSet操作XML的类(源代码)
using
System;
System.Data;
System.Xml;
System.Windows.Forms;
//***************************************
//
整理:
∮明天去要饭
QICQ:
305725744
.Net群:
6370988
bbb:
namespace
YSTRPaaamon
///
OperateXmlByDataSet
的摘要说明。
public
class
OperateXmlByDataSet()
TODO:
在此处添加构造函数逻辑
#region
GetDataSetByXml
读取xml直接返回DataSet
xml文件相对路径
static
DataSet
GetDataSetByXml(string
strXmlPath)
try
ds
=
new
DataSet();
ds.ReadXml(GetXmlFullPath(strXmlPath));
if(ds.Tables.Count
>
0)
return
ds;
null;
catch(Exception
ex)
System.Windows.Forms.MessageBox.Show(ex.ToString());
#endregion
GetDataViewByXml
读取Xml返回一个经排序或筛选后的DataView
筛选条件,如:
"
name
'kgdiwss'"
排序条件,如:
Id
desc"
DataView
GetDataViewByXml(string
strXmlPath,string
strWhere,string
strSort)
dv
DataView(ds.Tables[0]);
if(strSort
!
null)
dv.Sort
strSort;
if(strWhere
dv.RowFilter
strWhere;
dv;
catch(Exception)
WriteXmlByDataSet
向Xml文件插入一行数据
要插入行的列名数组,如:
string[]
Columns
{"
name"
IsMarried"
};
要插入行每列的值数组,如:
ColumnValue={"
明天去要饭"
false"
成功返回true,否则返回false
bool
WriteXmlByDataSet(string
strXmlPath,string[]
Columns,string[]
ColumnValue)
//根据传入的XML路径得到.XSD的路径,两个文件放在同一个目录下
string
strXsdPath
strXmlPath.Substring(0,strXmlPath.IndexOf("
."
))
+
.xsd"
//读xml架构,关系到列的数据类型
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));
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));
true;
false;
UpdateXmlRow
更行符合条件的一条Xml记录
XML文件路径
列名数组
列值数组
条件列名
条件列值
UpdateXmlRow(string
ColumnValue,string
strWhereColumnName,string
strWhereColumnValue)
//先判断行数
if(ds.Tables[0].Rows.Count
ds.Tables[0].Rows.Count;
//如果当前记录为符合Where条件的记录
if(ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue))
//循环给找到行的各列赋新值
j=0;
j
<
j++)
ds.Tables[0].Rows[i][Columns[j]]
ColumnValue[j];
//更新DataSet
//重新写入XML文件
DeleteXmlRowByIndex
通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行
要删除的行在DataSet中的Index值
DeleteXmlRowByIndex(string
strXmlPath,int
iDeleteRow)
//删除符号条件的行
ds.Tables[0].Rows[iDeleteRow].Delete();
DeleteXmlRows
删除strColumn列中值为ColumnValue的行
xml相对路径
列名
strColumn列中值为ColumnValue的行均会被删除
DeleteXmlRows(string
strColumn,string[]
//判断行多还是删除的值多,多的for循环放在里面
if(ColumnValue.Length
ds.Tables[0].Rows.Count)
i
ColumnValue.Length;
if(ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))
ds.Tables[0].Rows[i].Delete();
DeleteXmlAllRows
删除所有行
XML路径
DeleteXmlAllRows(string
//如果记录条数大于0
//移除所有记录
ds.Tables[0].Rows.Clear();
//重新写入,这时XML文件中就只剩根节点了
GetXmlFullPath
返回完整路径
Xml的路径
GetXmlFullPath(string
strPath)
if(strPath.IndexOf("
:
strPath;
Application.StartupPath
loading...
一个通过DataSet操作XML的类
这段时间写的项目每次都要用到XML保存一些配置,而每次操作XML都觉得挺麻烦,没有数据库那么顺手。
后来发现用DataSet操作XML很方便,而且灵活性比较好,于是写了一个操作XML的类,用来应付一般的XML操作(源码下载附件)。
1
基本思路
其实用DataSet操作XML,归根到底就是对DataSet里的表格,行,列等进行操作,然后用DataSet里的东西重新写到XML中,从而实现编辑XML的目的。
如果再配合上.xsd文件的话,那效果更佳。
2
程序详解
(1)
XML文件内容
本类操作的XML和生成的XML格式是一样的,如下:
//tempuri.org/xml_xmlDB.xsd"
2
A程序员
开发B/S结构程序
c#等
建国路XXX
2008-8-31
false
4
c#程序员
然后点击XML文件右下角的“数据”,即可看到熟悉的表格形式,在表格的任意位置上单击右键选择“创建架构”,将会生成一个.xsd文件,该文件用来定义XML各列的类型。
其内容如下(点击查看代码2附件):
xmlns:
mstns="
xmlns="
xs="
//aaaw3.org/2001/XMLSchema"
msdata="
urn:
schemas-microsoft-com:
xml-msdata"
attributeFormDefault="
qualified"
elementFormDefault="
msdata:
Locale="
zh-CN"
EnforceConstaints="
False"
?
AutoIncrement="
true"
AutoIncrementStep="
1"
AutoIncrementSeed="
/>
注意:
如果想像数据库一样有一个自动增长的ID字段,则可以这样操作:
首先在XML中添加一个元素,这样生成.xsd的时候,就会有一个ID段,在.xsd中选中ID这一列,在右边的属性中,将“AutoIncrementSeed”和“AutoIncrementStep”分别设置为1,这样ID就会从1开始以步长为1自动增长。
以上代码如果看不懂并不要紧,因为我们可以通过DataSet来生成这种格式的内容。
接下来将开始操作XML。
(2)
处理XML文件路径
这里主要是对传入的XML路径进行处理,如果传入的是相对路径,则返回完整路径,如果传入的是完整路径,则不做处理直接返回。
方法如下:
//如果路径中含有:
符号,则认定为传入的是完整路径
//返回完整路径
System.Web.bbbContext.Current.Server.MapPath(strPath);
(3)
读取记录
读取XML的数据到DataSet中的方法为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c# 操作 XML 更新 删除 节点 dataset 结合