xml文件的建立、添加、查询
2007-12-04 19:43
260 查看
1。xml文件的建立。关于如何分满xml文件会在“xml文件的添加”部分说明。
=======================code====================================
using System.Xml;
......
......
// 创建XmlTextWriter类的实例对象
XmlTextWriter textWriter = new XmlTextWriter(@"c:/test.xml", null); //文件位置
textWriter.Formatting = Formatting.Indented; //设置缩进格式
// 开始写过程,调用WriteStartDocument方法
textWriter.WriteStartDocument();
// 写入说明
textWriter.WriteComment("中国行政区划");
//创建一个节点
textWriter.WriteStartElement("Country");
textWriter.WriteElementString("Region", "华北");
textWriter.WriteEndElement();
// 写文档结束,调用WriteEndDocument方法
textWriter.WriteEndDocument();
// 关闭textWriter
textWriter.Close();
=====================code ending=======================================
结果:
<?xml version="1.0" ?>
- <!-- 中国行政区划 -->
- <Country>
<Region>华北</Region>
</Country>
2。xml文件的添加,xml文件制作的主要部分。
(1)添加
====================code========================================
//添加节点
string fileName = @"c:/test.xml"; //文件位置
XmlDocument xmlDoc = new XmlDocument(); //load xml
xmlDoc.Load(fileName);
XmlNode xn = xmlDoc.SelectSingleNode("Country");
//添加哪个标签的子级(注意SelectSingleNode函数是返回同级的第一个节点,其用法在后文描述)
XmlElement xmlElem1 = xmlDoc.CreateElement("Region"); //添加部分的标签
xmlElem1.SetAttribute("备注","黑土地"); //添加属性
xmlElem1.InnerText = "东北"; //内容
xn.AppendChild(xmlElem1); //添加
XmlElement xmlElem2 = xmlDoc.CreateElement("Region"); //添加部分的标签
xmlElem2.SetAttribute("备注", "黄土地"); //添加属性
xmlElem2.SetAttribute("面积", "挺大"); //再添加一个属性
xmlElem2.InnerText = "中南"; //内容
xn.AppendChild(xmlElem2); //添加
xmlDoc.Save(fileName); //存盘
=====================code ending=====================================
结果:
<?xml version="1.0" ?>
- <!-- 中国行政区划 -->
- <Country>
<Region>华北</Region>
<Region 备注="黑土地">东北</Region>
<Region 备注="黄土地" 面积="挺大">中南</Region>
</Country>
注意:a. AppendChild方法的添加都是以最后一个节点的身份添加在那一级的节点之后
b. 如果上面部分程序运行2次是添加2遍的。
(2)如何选择添加在什么地方添加
=====================code======================================
string fileName = @"c:/test.xml"; //文件位置
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
string content = "黑龙江"; //要添加的内容
string parentContent = "东北"; //添加在谁的子级下
//此处即把“黑龙江”添加在“东北”节点下面
XmlElement xmlElemChild; //要添加的节点
XmlNode xnParent;
XmlNodeList xnParentList; //父结点可能出处列表
int i;
xmlElemChild = xmlDoc.CreateElement("Region"); //创造要添加的节点
xmlElemChild.InnerText = content;
//找到要插入内容的父节点位置
xnParentList = xmlDoc.DocumentElement.SelectNodes("//Country['" + parentContent + "']");
//SelectNodes返回的是节点列表,xmlNodeList类型
xnParent = null;
for (i = 0; i < xnParentList.Count; i++)
{
//先判断前面的长度,如果长度条件符合再判断内容是否一致
if (xnParentList.Item(i).InnerText.Length >= parentContent.Length &&
xnParentList.Item(i).InnerText.Substring(0, parentContent.Length) == parentContent)
{
xnParent = xnParentList.Item(i); //找到了
break;
}
/*InnerText属性是返回此节点“及其子节点”的字符串链,去最前面parentContent.Length的长度就是
所要找的节点内容*/
}
if (xnParent!=null)
{
xnParent.AppendChild(xmlElemChild); //添加
}
xmlDoc.Save(fileName); //存盘
==================code ending===================================
结果:
<?xml version="1.0" ?>
- <!-- 中国行政区划-->
- <Country>
<Region>华北</Region>
- <Region 备注="黑土地">
东北
<Province>黑龙江</Province>
</Region>
<Region 备注="黄土地" 面积="挺大">中南</Region>
</Country>
注意:此处用的是查找父结点的方法找到要添加在什么位置,同时又使用的AppendChild方法,所以只能确定地把要添加的内容添加到指定节点子级,而不能添加到指定节点子级的指定位置(只能作为最后一个元素加进去)
3。xml文件的查找
(1)查找指定节点
====================code=============================================
xnTargetList = xmlDoc.DocumentElement.SelectNodes("//*['" + target + "']");
xnTarget = null;
for (i = 0; i < xnTargetList.Count; i++)
{
if (xnTargetList.Item(i).InnerText.Length >= target.Length &&
xnTargetList.Item(i).InnerText.Substring(0, target.Length) == target)
{
xnTarget = xnTargetList.Item(i); //找到了
break;
}
}
====================code ending====================================
a. xnTarget即储存找到的结果
b. 关键是SelectNodes函数,下面列出SelectNodes常用写法(同样适用于SelectSingleNode函数):
/ 指示节点路径 --路径匹配
// 所有路径以"//"后指定的子路径结尾的元素
* 路径的通配符
/A/B/C[1] A元素→B元素→C元素的第一个子元素 --位置匹配
/A/B/C[last()] A元素→B元素→C元素的最后一个子元素
/A/B/C[position()>1] A元素→B元素→C元素之下的位置号大于1的元素
//B[@id] 所有具有属性id的B元素 --属性匹配
//E/parent::* 所有E节点的父节点元素 --亲戚关系匹配
/A/child::* A的子元素
详情可参阅:http://blog.csdn.net/zhuyoulang/archive/2007/12/05/1918599.aspx
(2)遍历指定节点的全部子节点
=====================code========================================
xnTargetList = xmlDoc.DocumentElement.SelectNodes("//*['" + target + "']");
xnTarget = null;
for (i = 0; i < xnTargetList.Count; i++)
91c9
{
if (xnTargetList.Item(i).InnerText.Length >= target.Length &&
xnTargetList.Item(i).InnerText.Substring(0, target.Length) == target)
{
xnTarget = xnTargetList.Item(i); //找到了
break;
}
}
xnSelfList = xmlDoc.DocumentElement.SelectNodes("/xnTarget/child::*");
for (i = 0; i < xnSelfList.Count; i++)
{
if (xnSelfList.Item(i).InnerText.IndexOf(childContent) >= 0)
{
XmlNodeList tempXnList = xnParent.ChildNodes;
for (int k = 1; k < tempXnList.Count; k++)
{
visit(tempXnList.Item(k).FirstChild.Value == childContent)
}
}
}
=================code ending=====================================
(3)按属性查找
XmlNodeList xnl=xmlDoc.SelectSingleNode("targetTag").ChildNodes;
//其中string targetTag是要查找的内容的标签
foreach(XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;
if(xe.GetAttribute("genre")=="fantasy")
{
findit();
}
}
网络上最常见的方法,最简单,但相对不易应用,因为SelectSingleNode只能找到同级的第一个节点,而不是定向查找。
=======================code====================================
using System.Xml;
......
......
// 创建XmlTextWriter类的实例对象
XmlTextWriter textWriter = new XmlTextWriter(@"c:/test.xml", null); //文件位置
textWriter.Formatting = Formatting.Indented; //设置缩进格式
// 开始写过程,调用WriteStartDocument方法
textWriter.WriteStartDocument();
// 写入说明
textWriter.WriteComment("中国行政区划");
//创建一个节点
textWriter.WriteStartElement("Country");
textWriter.WriteElementString("Region", "华北");
textWriter.WriteEndElement();
// 写文档结束,调用WriteEndDocument方法
textWriter.WriteEndDocument();
// 关闭textWriter
textWriter.Close();
=====================code ending=======================================
结果:
<?xml version="1.0" ?>
- <!-- 中国行政区划 -->
- <Country>
<Region>华北</Region>
</Country>
2。xml文件的添加,xml文件制作的主要部分。
(1)添加
====================code========================================
//添加节点
string fileName = @"c:/test.xml"; //文件位置
XmlDocument xmlDoc = new XmlDocument(); //load xml
xmlDoc.Load(fileName);
XmlNode xn = xmlDoc.SelectSingleNode("Country");
//添加哪个标签的子级(注意SelectSingleNode函数是返回同级的第一个节点,其用法在后文描述)
XmlElement xmlElem1 = xmlDoc.CreateElement("Region"); //添加部分的标签
xmlElem1.SetAttribute("备注","黑土地"); //添加属性
xmlElem1.InnerText = "东北"; //内容
xn.AppendChild(xmlElem1); //添加
XmlElement xmlElem2 = xmlDoc.CreateElement("Region"); //添加部分的标签
xmlElem2.SetAttribute("备注", "黄土地"); //添加属性
xmlElem2.SetAttribute("面积", "挺大"); //再添加一个属性
xmlElem2.InnerText = "中南"; //内容
xn.AppendChild(xmlElem2); //添加
xmlDoc.Save(fileName); //存盘
=====================code ending=====================================
结果:
<?xml version="1.0" ?>
- <!-- 中国行政区划 -->
- <Country>
<Region>华北</Region>
<Region 备注="黑土地">东北</Region>
<Region 备注="黄土地" 面积="挺大">中南</Region>
</Country>
注意:a. AppendChild方法的添加都是以最后一个节点的身份添加在那一级的节点之后
b. 如果上面部分程序运行2次是添加2遍的。
(2)如何选择添加在什么地方添加
=====================code======================================
string fileName = @"c:/test.xml"; //文件位置
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
string content = "黑龙江"; //要添加的内容
string parentContent = "东北"; //添加在谁的子级下
//此处即把“黑龙江”添加在“东北”节点下面
XmlElement xmlElemChild; //要添加的节点
XmlNode xnParent;
XmlNodeList xnParentList; //父结点可能出处列表
int i;
xmlElemChild = xmlDoc.CreateElement("Region"); //创造要添加的节点
xmlElemChild.InnerText = content;
//找到要插入内容的父节点位置
xnParentList = xmlDoc.DocumentElement.SelectNodes("//Country['" + parentContent + "']");
//SelectNodes返回的是节点列表,xmlNodeList类型
xnParent = null;
for (i = 0; i < xnParentList.Count; i++)
{
//先判断前面的长度,如果长度条件符合再判断内容是否一致
if (xnParentList.Item(i).InnerText.Length >= parentContent.Length &&
xnParentList.Item(i).InnerText.Substring(0, parentContent.Length) == parentContent)
{
xnParent = xnParentList.Item(i); //找到了
break;
}
/*InnerText属性是返回此节点“及其子节点”的字符串链,去最前面parentContent.Length的长度就是
所要找的节点内容*/
}
if (xnParent!=null)
{
xnParent.AppendChild(xmlElemChild); //添加
}
xmlDoc.Save(fileName); //存盘
==================code ending===================================
结果:
<?xml version="1.0" ?>
- <!-- 中国行政区划-->
- <Country>
<Region>华北</Region>
- <Region 备注="黑土地">
东北
<Province>黑龙江</Province>
</Region>
<Region 备注="黄土地" 面积="挺大">中南</Region>
</Country>
注意:此处用的是查找父结点的方法找到要添加在什么位置,同时又使用的AppendChild方法,所以只能确定地把要添加的内容添加到指定节点子级,而不能添加到指定节点子级的指定位置(只能作为最后一个元素加进去)
3。xml文件的查找
(1)查找指定节点
====================code=============================================
xnTargetList = xmlDoc.DocumentElement.SelectNodes("//*['" + target + "']");
xnTarget = null;
for (i = 0; i < xnTargetList.Count; i++)
{
if (xnTargetList.Item(i).InnerText.Length >= target.Length &&
xnTargetList.Item(i).InnerText.Substring(0, target.Length) == target)
{
xnTarget = xnTargetList.Item(i); //找到了
break;
}
}
====================code ending====================================
a. xnTarget即储存找到的结果
b. 关键是SelectNodes函数,下面列出SelectNodes常用写法(同样适用于SelectSingleNode函数):
/ 指示节点路径 --路径匹配
// 所有路径以"//"后指定的子路径结尾的元素
* 路径的通配符
/A/B/C[1] A元素→B元素→C元素的第一个子元素 --位置匹配
/A/B/C[last()] A元素→B元素→C元素的最后一个子元素
/A/B/C[position()>1] A元素→B元素→C元素之下的位置号大于1的元素
//B[@id] 所有具有属性id的B元素 --属性匹配
//E/parent::* 所有E节点的父节点元素 --亲戚关系匹配
/A/child::* A的子元素
详情可参阅:http://blog.csdn.net/zhuyoulang/archive/2007/12/05/1918599.aspx
(2)遍历指定节点的全部子节点
=====================code========================================
xnTargetList = xmlDoc.DocumentElement.SelectNodes("//*['" + target + "']");
xnTarget = null;
for (i = 0; i < xnTargetList.Count; i++)
91c9
{
if (xnTargetList.Item(i).InnerText.Length >= target.Length &&
xnTargetList.Item(i).InnerText.Substring(0, target.Length) == target)
{
xnTarget = xnTargetList.Item(i); //找到了
break;
}
}
xnSelfList = xmlDoc.DocumentElement.SelectNodes("/xnTarget/child::*");
for (i = 0; i < xnSelfList.Count; i++)
{
if (xnSelfList.Item(i).InnerText.IndexOf(childContent) >= 0)
{
XmlNodeList tempXnList = xnParent.ChildNodes;
for (int k = 1; k < tempXnList.Count; k++)
{
visit(tempXnList.Item(k).FirstChild.Value == childContent)
}
}
}
=================code ending=====================================
(3)按属性查找
XmlNodeList xnl=xmlDoc.SelectSingleNode("targetTag").ChildNodes;
//其中string targetTag是要查找的内容的标签
foreach(XmlNode xn in xnl)
{
XmlElement xe=(XmlElement)xn;
if(xe.GetAttribute("genre")=="fantasy")
{
findit();
}
}
网络上最常见的方法,最简单,但相对不易应用,因为SelectSingleNode只能找到同级的第一个节点,而不是定向查找。
相关文章推荐
- xml文件的建立、添加、查询
- XML文件操作(查询,添加,修改,删除 结点)
- XML文件操作(查询,添加,修改,删除 结点)
- 将表/查询存储为标准的XML文件
- MyEclipse 为xml添加本地的dtd文件
- 创建、查询、修改带名称空间的 XML 文件的例子
- MyEclipse添加ibatis DTD文件实现xml的自动提示功能
- android 建立的activity不自带titlebar,并且用TimePicker和DataPicker中XML文件显示的和手机屏幕上不一致
- .net 操作XML(1)添加,删除,修改,查询
- 创建xml文件,添加节点,读取xml文件中某属性的属性值
- Tomcat全局/局部https访问配置方法【tomcat容器的配置文件web.xml中添加security-constraint】
- Nhibernate为hbm.xml配置文件添加智能提示(VS2010)
- Qt编写Android程序中添加XML配置文件
- 实验C JavaScript DOM操作XML显示查询添加删除
- Eclipse添加DTD文件实现xml的自动提示功能
- oracle 查询XML操作、操作系统文件
- struts.xml 文件添加DTD文件
- 如何在maven项目的pom.xml文件中添加jar包
- 将表/查询存储为标准的XML文件
- 创建、查询、修改带名称空间的 XML 文件的例子