1、XML文件

 <?xml version="1.0" encoding="utf-8"?>
<PersonF xmlns="" Name="(test)work hard work smart!">
<person Name="Person1">
<ID>1</ID>
<Name>XiaoA</Name>
<Age>59</Age>
</person>
<person Name="Person2">
<ID>2</ID>
<Name>XiaoB</Name>
<Age>29</Age>
</person>
<person Name="Person3">
<ID>3</ID>
<Name>XiaoC</Name>
<Age>103</Age>
</person>
<person Name="Person4">
<ID>4</ID>
<Name>XiaoD</Name>
<Age>59</Age>
</person>
</PersonF>

2、程序代码

        string path = @"E:\测试\XML读取\XML.xml";
XmlDocument xd = new XmlDocument();
try
{
xd.Load(path);
switch (count)
{
case :
//1、读取单个节点的数据
XmlNode xn1= xd.SelectSingleNode("PersonF");
richTextBox1.Text = xn1.InnerText.ToString();
count++;break;
case :
//2、读取多个节点的数据
XmlNodeList xn2 = xd.SelectNodes("PersonF/person");
foreach (XmlNode xn in xn2)
{
richTextBox1.Text += xn.InnerText;
}
count++;break;
case :
//3.1、读取具体节点的具体值 如:Name属性为Person2的Name的InnerText
XmlNodeList xn3 = xd.DocumentElement.GetElementsByTagName("person");
foreach (XmlNode xn in xn3)
{
if (xn.Attributes["Name"].InnerText == "Person2")
{
richTextBox1.Text += xn.InnerText;
}
}
count++; break;
case :
//3.2、读取ID为2所在的节点第二个子节点Name的InnerText
XmlNode xn4 = xd.SelectSingleNode("PersonF/person[ID=2]");
richTextBox1.Text = xn4.ChildNodes[].InnerText;
count++; break;
case :
//3.3、找到ID为2的节点的父节点Name属性
XmlNodeList xn5 = xd.SelectNodes("//person//ID");//读取ID为2的节点
foreach (XmlNode xn in xn5)
{
if (xn.InnerText == "")
{
richTextBox1.Text += xn.ParentNode.Attributes["Name"].InnerText;
}
}
count++;break;
case :
//4、修改节点属性
XmlNode xn6 = xd.SelectSingleNode("PersonF");
xn6.Attributes["Name"].InnerText = "helloworld";
xd.Save(path);
count++; break;
case :
//5、添加自定义节点
XmlTextReader xr = new XmlTextReader(path);
XmlElement root = xd.DocumentElement;//根节点(最外层节点) XmlElement newele = xd.CreateElement("person");//第二层节点
newele.SetAttribute("Name", "Person6"); XmlElement ele_id = xd.CreateElement("ID");//newele子节点
ele_id.InnerText = "";
XmlElement ele_name = xd.CreateElement("Name");//newele子节点
ele_name.InnerText = "XiaoE";
newele.AppendChild(ele_id);
newele.AppendChild(ele_name);
root.AppendChild(newele); xr.Close();
xd.Save(path); count=; break;
} }
catch
{
Exception ex;
}

源码下载:http://pan.baidu.com/s/1dDRzZ4P

3.XPath详解

1)"/bookstore/book/price"

XPath的开头是一个斜线(/)代表这是绝对路径,这可以选出所有路径符合这个模式的元素。这代表选出所有bookstore根节点下的book元素下的price元素。

2)"//title"

开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。这代表选出所有title元素。

3)"/bookstore/book/author/*"

使用星号(*)可以选择未知的元素。这代表选出bookstore根节点下的book节点下的anthor节点下的所有可能的节点。

得到的结果:25 25 female

4)"/bookstore/book/*/age"

上面的语法会选出所有bookstore根节点下的book节点的隔一个层次的age节点。

得到的结果为:25 25

5)"/*/*/age"

选取有两个层级的age元素,得到的结果为:100

要注意的是,想要存取不分层级的元素,XPath语法必须以两个斜线开头(//),想要存取未知元素才用星号(*),星号只能代表未知名称的元素,不能代表未知层级的元素。

6)"bookstore/book[1]/title"

使用中括号可以选择分支。这代表选择bookstore根节点下第一个book节点的title节点。

得到的结果为:C语言

7)"bookstore/book[last()]/title"

同样,这里表示选择最后一个节点,得到的结果是:数据结构

8)"bookstore/book/author[sex]"

这里表示选取所有带有sex元素并满足一定层次结构的author节点,得到的结果是:25female

9)"/bookstore/book[price=66.5]/title"

选取price元素值是66.5的book节点的title子节点,得到的结果是:数据结构

10)"/bookstore/book/title | /bookstore/book/price"

使用Or操作数(|)就可以选择一个以上的路径。这里表示选取符合一定层次结构的title元素与price元素

其结果是:C语言 50 数据库 100 数据结构 66.5

11)"//@name"

在XPath中,除了选择元素以外,也可以选择属性,属性都是以@开头。这里表示选取所有的name属性。

其结果是:XIAO Wang

12)"//author[@name]/age"

这里表示选取所有具有name属性的author节点的age节点。其结果是:25 25

13)"//*[@*]"

选取所有有属性的节点。其结果是:25 25female

14)"//author[@name='Wang']/sex"

选取所有属性name值为Wang的author节点的sex子节点。其结果是:female

小结:
1. 读写整个XML最方便的方法是使用序列化反序列化。
2. 如果您希望某个参数以Xml Property的形式出现,那么需要使用[XmlAttribute]修饰它。
3. 如果您希望某个参数以Xml Element的形式出现,那么需要使用[XmlElement]修饰它。
4. 如果您希望为某个List的项目指定ElementName,则需要[XmlArrayItem]
5. 以上3个Attribute都可以指定在XML中的映射别名。
6. 写XML的操作是通过XmlSerializer.Serialize()来实现的。
7. 读取XML文件是通过XmlSerializer.Deserialize来实现的。
8. List或Array项,请不要使用[XmlElement],否则它们将以内联的形式提升到当前类,除非你再定义一个容器类。

1、c#对XML文件的解析的更多相关文章

  1. JDOM方法实现对XML文件的解析

    首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...

  2. xml文件的解析

    1. xml文件的解析 void CDataMgr::readStringData() { std::string xml_name = "config/string.xml"; ...

  3. [置顶] Android开发之XML文件的解析

    Android系统开发之XML文件的解析 我们知道Http在网络传输中的数据组织方式有三种分别为:XML方式.HTML方式.JSON方式.其中XML为可扩展标记语言,如下: <?xml vers ...

  4. 类的反射及xml文件的解析

    类的反射 xml文件的解析 .properties||.xml配置文件的创建及读取内容 //创建对象 Properties properties = new Properties(); //存储 pr ...

  5. JAVA读取XML文件并解析获取元素、属性值、子元素信息

    JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取  InputStream   DocumentBuilderFactory   Element     Node 前言 最 ...

  6. 用SAX和PULL进行XML文件的解析与生成

    XML解析有传统的dom方法还有Jsoup,SAX,PULL等,这里讲的是比较省内存的SAX和PULL方法.Android中极力推荐用PULL的方式来解析,我个人觉得pull确实比较简单,但其内部的逻 ...

  7. 【文件处理】xml 文件 DOM解析

    一.Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath 此文针对其中的DOM方法具体展开介绍及代码分析 sax.dom是两种对xml文档进行解析的方法(没有具体实 ...

  8. Java中使用DOM4J来生成xml文件和解析xml文件

    一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...

  9. 用java操作XML文件(DOM解析方式)

    XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

  10. MFC读取XML文件并解析

    现在经常会对XML文件进行操作,怎么在MFC下去读和解析XML文件呢?直接上代码: 首先得等在stdafx.h中加入这句,以引入MSXML命名空间 #import <msxml3.dll> ...

随机推荐

  1. [ASM C/C++] C makefile:2: *** missing separator. Stop. 问题

    在利用make编译代码时,makefile文件的目标代码前面要用tab而不能用空格来代替. 要不然就会提示: makefile:2: *** missing separator.  Stop. 要注意 ...

  2. Windows下Eclipse连接hadoop

    2015-3-27 参考: http://www.cnblogs.com/baixl/p/4154429.html http://blog.csdn.net/u010911997/article/de ...

  3. ATI Radeon HD 5450 with full QE/CI Support ( 转载 )

    ATI Radeon HD 5450 with full QE/CI Support - DSDT (Contains HDMI Audio Edit Too) & AGPM included ...

  4. 用JavaBean实现数据库的连接和关闭,在jsp页面输出数据库中student表中学生的信息

    package com.hanqi.test; import java.sql.*; public class XveSheng { Connection conn; Statement st; Re ...

  5. [jetbrains系列] 外链第三方库+代码补全设置

    jetbrains系列的IDE真的是太好用了,有种相见恨晚的感觉. 在开发过程中第三方库是必不可少的,在开发的时候如果有一个可以补全的IDE可以节省查文档的时间. 举个例子:给pycharm配pysp ...

  6. 自定义弹出框基于zepto 记得引入zepto

    html <!DOCTYPE html> <html> <meta charset="utf-8"> <title></tit ...

  7. 学的一点点ps

    从C语言的代码中解脱开始学ps,看到色彩鲜明的东西,心里只有那么爽.哈哈.只学习3天,虽然只是一些皮毛,可还是学到了一些以前不知道的东西.让我对ps多了很多兴趣,决定以后要自学更多的ps技能.要给图片 ...

  8. MySQL数据库优化的八种方式(经典必看)

      引言: 关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂 偶尔发现了这篇文章,总结得很经典,文章流量也很大,所以拿到自己的总结文集中,积累优质文章,提升个人 ...

  9. Delphi TTable 组件

    TTable 是 TDataSet 的派生类,它是基于 BDE 数据库引擎的数据集组件,也是一个较简单的数据组件,可以直接从数据库中获取数据表的数据,只需设置连接的数据库属性(Database) 和所 ...

  10. Deep Learning 8_深度学习UFLDL教程:Stacked Autocoders and Implement deep networks for digit classification_Exercise(斯坦福大学深度学习教程)

    前言 1.理论知识:UFLDL教程.Deep learning:十六(deep networks) 2.实验环境:win7, matlab2015b,16G内存,2T硬盘 3.实验内容:Exercis ...