/// <summary>
/// 获取一个报表的参数 http://blog.csdn.net/hdhai9451/article/details/12170069
/// </summary>
public static ReportAdapterSection GetReportAdapterSectionByID(string ReportID, ProfileRole RoleType, ReportTemplateType TemplateType)
{
ReportAdapterSection reportModel = new ReportAdapterSection();
XmlDocument xmlDoc = new XmlDocument();
string configFile = GetReportConfigFile(RoleType, TemplateType);
xmlDoc.Load(configFile);
XmlNodeList nodes = xmlDoc.SelectSingleNode("ReportConfig").ChildNodes;
List<ReportParamSection> list = new List<ReportParamSection>(); foreach (XmlElement node in nodes)
{
if (node.HasChildNodes && node.Attributes["ID"].Value == ReportID)
{
string MainID = node.Attributes["ID"].Value;
reportModel.ID = MainID;
reportModel.Title = node.Attributes["Title"].Value;
string UniqueKey = string.Empty;
if (node.Attributes["UniqueKey"] != null)
{
UniqueKey = node.Attributes["UniqueKey"].Value;
}
reportModel.UniqueKey = UniqueKey;
string SummaryAmtOrNum = string.Empty;
if (node.Attributes["SummaryAmtOrNum"] != null)
{
SummaryAmtOrNum = node.Attributes["SummaryAmtOrNum"].Value;
}
reportModel.SummaryAmtOrNum = SummaryAmtOrNum; bool IsAddTotal = false;
if (node.Attributes["IsAddTotal"] != null)
{
IsAddTotal = node.Attributes["IsAddTotal"].Value == "" ? true : false;
}
reportModel.IsAddTotal = IsAddTotal;
XmlNode paramsNode = node.SelectSingleNode("Params");
if (paramsNode != null && paramsNode.HasChildNodes)
{
foreach (XmlElement item in paramsNode)
{
ReportParamSection model = new ReportParamSection();
model.MainID = MainID;
model.Title = item.Attributes["ParaTitle"].Value;
model.Type = (ReportParaType)Enum.Parse(typeof(ReportParaType), item.Attributes["ParaType"].Value); //参数
string paras1 = string.Empty, paras2 = string.Empty;
paras1 = item.Attributes["Para1Name"].Value;
if (item.Attributes["Para2Name"] != null)
{
paras2 = item.Attributes["Para2Name"].Value;
}
model.Params = new string[] { paras1, paras2 };
//默认值
string dvalue1 = string.Empty, dvalue2 = string.Empty;
if (item.Attributes["Default1Value"] != null)
{
dvalue1 = item.Attributes["Default1Value"].Value;
}
if (item.Attributes["Default2Value"] != null)
{
dvalue2 = item.Attributes["Default2Value"].Value;
}
model.DefaultValues = new string[] { dvalue1, dvalue2 };
//条件标题
string ConditionTitle = string.Empty;
if (item.Attributes["ConditionTitle"] != null)
{
ConditionTitle = item.Attributes["ConditionTitle"].Value;
}
model.ConditionTitle = ConditionTitle;
list.Add(model);
}
}
XmlNode sqlNode = node.SelectSingleNode("SqlStatement");
reportModel.MasterSqlStatement = sqlNode.InnerText;
if (node.SelectSingleNode("Remark1") != null)
{
reportModel.Remark1 = node.SelectSingleNode("Remark1").Attributes["Text"].Value;
}
if (node.SelectSingleNode("Remark2") != null)
{
reportModel.Remark2 = node.SelectSingleNode("Remark2").Attributes["Text"].Value;
}
if (node.SelectSingleNode("Remark3") != null)
{
reportModel.Remark3 = node.SelectSingleNode("Remark3").Attributes["Text"].Value;
}
}
}
reportModel.ParamSettings = list;
return reportModel;
}
<?xml version="1.0" encoding="utf-8" ?>
<ReportConfig>
<Report ID="" Title="The InKindItem Information">
<Params>
<ParamItem ParaType="DateRange" ParaTitle="饋贈日期" Para1Name="@StartDate" Para2Name="@EndDate" Default1Value="-365" Default2Value="" ConditionTitle="InKindItemDate"/>
</Params>
<SqlStatement>
<![CDATA[
select *
from ProfileInKindItem
where InKindDate between @StartDate and @EndDate ]]>
</SqlStatement>
</Report>
</ReportConfig>

http://www.cnblogs.com/yukaizhao/archive/2011/07/19/csharp_xmldocument_access_xml.html

<?xml version="1.0" encoding="utf-8" ?>
<students>
<!--我是一段注释文字-->
<student name="张平">
<courses>
<course name="语文?">
<teacherComment>
<![CDATA[
这里是语文老师的批注
]]>
</teacherComment>
</course> <course name="数学">
<teacherComment>
<![CDATA[
这里是数学老师的批注
]]>
</teacherComment>
</course>
</courses>
</student>
</students>

1.如何使用XmlDocument读取Xml

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml; namespace XmlExample
{
class Program
{
static void Main(string[] args)
{
string xmlFilePath = @"X:\about.net\example\XmlExample\1.xml";
XmlDocument doc = new XmlDocument();
doc.Load(xmlFilePath); //使用xpath表达式选择文档中所有的student子节点
XmlNodeList studentNodeList = doc.SelectNodes("/students/student");
if (studentNodeList != null)
{
foreach (XmlNode studentNode in studentNodeList)
{
//通过Attributes获得属性名字为name的属性
string name = studentNode.Attributes["name"].Value;
Console.WriteLine("Student:" + name); //通过SelectSingleNode方法获得当前节点下的courses子节点
XmlNode coursesNode = studentNode.SelectSingleNode("courses"); //通过ChildNodes属性获得courseNode的所有一级子节点
XmlNodeList courseNodeList = coursesNode.ChildNodes;
if (courseNodeList != null)
{
foreach (XmlNode courseNode in courseNodeList)
{
Console.Write("\t");
Console.Write(courseNode.Attributes["name"].Value);
Console.Write("老师评语");
//通过FirstNode属性可以获得课程节点的第一个子节点,LastNode可以获得最后一个子节点
XmlNode teacherCommentNode = courseNode.FirstChild;
//读取CData节点
XmlCDataSection cdata = (XmlCDataSection)teacherCommentNode.FirstChild;
Console.WriteLine(cdata.InnerText.Trim());
}
}
}
} Console.Write("\r\nPress any key to continue....");
Console.Read();
}
}
}

2.如何通过XmlDocument编辑Xml

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml; namespace WriteXml
{
class Program
{
static void Main(string[] args)
{
XmlDocument xmlDoc = new XmlDocument();
//创建Xml声明部分,即<?xml version="1.0" encoding="utf-8" ?>
xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes"); //创建根节点
XmlNode rootNode = xmlDoc.CreateElement("students"); //创建student子节点
XmlNode studentNode = xmlDoc.CreateElement("student");
//创建一个属性
XmlAttribute nameAttribute = xmlDoc.CreateAttribute("name");
nameAttribute .Value = "张同学";
//xml节点附件属性
studentNode.Attributes.Append(nameAttribute); //创建courses子节点
XmlNode coursesNode = xmlDoc.CreateElement("courses");
XmlNode courseNode1 = xmlDoc.CreateElement("course");
XmlAttribute courseNameAttr = xmlDoc.CreateAttribute("name");
courseNameAttr.Value = "语文";
courseNode1.Attributes.Append(courseNameAttr);
XmlNode teacherCommentNode = xmlDoc.CreateElement("teacherComment");
//创建Cdata块
XmlCDataSection cdata = xmlDoc.CreateCDataSection("<font color=\"red\">这是语文老师的批注</font>");
teacherCommentNode.AppendChild(cdata);
courseNode1.AppendChild(teacherCommentNode);
coursesNode.AppendChild(courseNode1);
//附加子节点
studentNode.AppendChild(coursesNode); rootNode.AppendChild(studentNode);
//附加根节点
xmlDoc.AppendChild(rootNode); //保存Xml文档
xmlDoc.Save(@"d:\test.xml"); Console.WriteLine("已保存Xml文档"); }
}
}
  //这只是一些写法            

              XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(this.ConfigString);
XmlNode root = xmlDoc.DocumentElement; //取到根结点
XmlNode otNode = xmlDoc.SelectSingleNode("ShiftConfig/Ot");
XmlNode itemNode = xmlDoc.SelectSingleNode("ShiftConfig/Item");
XmlNodeList otNodeList = otNode.ChildNodes;
XmlNodeList itemNodeList = itemNode.ChildNodes;
if (otNodeList != null)
{
//TODO:把ot下面节点foreach,查看xml结构:SELECT CONVERT(XML,configstring), * FROM At_Shift ,下面的注释不用可以删除
foreach (XmlNode node in otNodeList)
{ } }
if (itemNodeList != null)
{
//TODO:把item下面的节点foreach
foreach (XmlNode node in otNodeList)
{ }
} //XmlNode shiftConfigNode = xmlDoc.SelectSingleNode("ShiftConfig");
//if (otNode == null)
//{
// //XmlElement xe1 = xmlDoc.CreateElement("Ot");//创建一个Ot节点
// //xe1.InnerText = "10.95";
// //xmlDoc.DocumentElement.AppendChild(xe1); // //XmlNode newNode = xmlDoc.CreateNode("element", "Ot", "");
// // newNode.InnerText = "WPF";
// // root.AppendChild(newNode);//添加为根元素的第一层子结点 // XmlNode deep1 = root.CloneNode(true); //克隆根节点
// //Console.WriteLine(deep.OuterXml);
// XmlNode xx = xmlDoc.ImportNode(deep1, true);
// root.AppendChild(xx);

http://www.cr173.com/html/23515_1.html

一 前言

先来了解下操作XML所涉及到的几个类及之间的关系  如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家

* 1 XMLElement 主要是针对节点的一些属性进行操作
* 2 XMLDocument 主要是针对节点的CUID操作
* 3 XMLNode 为抽象类,做为以上两类的基类,提供一些操作节点的方法

清楚了以上的关系在操作XML时会更清晰一点

二 具体操作

以下会对Xml的结点与属性做增 删 改 查的操作也满足了实际工作中的大部分情况

先构造一棵XML树如下,其中也涉及到了写入xml文档的操作

         public void CreatXmlTree(string xmlPath)
{
XElement xElement = new XElement(
new XElement("BookStore",
new XElement("Book",
new XElement("Name", "C#入门", new XAttribute("BookName", "C#")),
new XElement("Author", "Martin", new XAttribute("Name", "Martin")),
new XElement("Adress", "上海"),
new XElement("Date", DateTime.Now.ToString("yyyy-MM-dd"))
),
new XElement("Book",
new XElement("Name", "WCF入门", new XAttribute("BookName", "WCF")),
new XElement("Author", "Mary", new XAttribute("Name", "Mary")),
new XElement("Adress", "北京"),
new XElement("Date", DateTime.Now.ToString("yyyy-MM-dd"))
)
)
); //需要指定编码格式,否则在读取时会抛:根级别上的数据无效。 第 1 行 位置 1异常
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new UTF8Encoding(false);
settings.Indent = true;
XmlWriter xw = XmlWriter.Create(xmlPath,settings);
xElement.Save(xw);
//写入文件
xw.Flush();
xw.Close();
}

然后得到如下的XML树

 <?xml version="1.0" encoding="utf-8"?>
<BookStore>
<Book>
<Name BookName="C#">C#入门</Name>
<Author Name="Martin">Martin</Author>
<Date>2013-10-11</Date>
<Adress>上海</Adress>
<Date>2013-10-11</Date>
</Book>
<Book>
<Name BookName="WCF">WCF入门</Name>
<Author Name="Mary">Mary</Author>
<Adress>北京</Adress>
<Date>2013-10-11</Date>
</Book>
</BookStore>

以下操作都是对生成的XML树进行操作

2.1 新增节点与属性

新增节点NewBook并增加属性Name="WPF"

       public void Create(string xmlPath)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath); var root = xmlDoc.DocumentElement;//取到根结点
XmlNode newNode = xmlDoc.CreateNode("element", "NewBook", "");
newNode.InnerText = "WPF"; //添加为根元素的第一层子结点
root.AppendChild(newNode);
xmlDoc.Save(xmlPath);
}

开篇有写操作xml节点属性主要用XmlElement对象所以取到结点后要转类型

          //属性
public void CreateAttribute(string xmlPath)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath);
var root = xmlDoc.DocumentElement;//取到根结点
XmlElement node = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
node.SetAttribute("Name", "WPF");
xmlDoc.Save(xmlPath); }

效果如下

2.2 删除节点与属性

          public void Delete(string xmlPath)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath);
var root = xmlDoc.DocumentElement;//取到根结点 var element = xmlDoc.SelectSingleNode("BookStore/NewBook");
root.RemoveChild(element);
xmlDoc.Save(xmlPath);
}

删除属性

          public void DeleteAttribute(string xmlPath)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath);
XmlElement node = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
//移除指定属性
node.RemoveAttribute("Name");
//移除当前节点所有属性,不包括默认属性
//node.RemoveAllAttributes();
xmlDoc.Save(xmlPath);
}

2.3 修改节点与属性

xml的节点默认是不允许修改的,本文也就不做处理了

修改属性代码如下

         public void ModifyAttribute(string xmlPath)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath);
XmlElement element = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
element.SetAttribute("Name", "Zhang");
xmlDoc.Save(xmlPath);
}

效果如下

2.4 获取节点与属性

         public void Select(string xmlPath)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath);
//取根结点
var root = xmlDoc.DocumentElement;//取到根结点
//取指定的单个结点
XmlNode oldChild = xmlDoc.SelectSingleNode("BookStore/NewBook"); //取指定的结点的集合
XmlNodeList nodes = xmlDoc.SelectNodes("BookStore/NewBook"); //取到所有的xml结点
XmlNodeList nodelist = xmlDoc.GetElementsByTagName("*");
}

属性

        public void SelectAttribute(string xmlPath)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlPath);
XmlElement element = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
string name = element.GetAttribute("Name");
Console.WriteLine(name);
}

三  linq to XML 操作

Linq to Xml 也没什么变化只操作对象改变了主要涉及的几个对象如下   注:我并没有用linq的语法去操作元素。

XDocument:用于创建一个XML实例文档

XElement:用于一些节点与节点属性的基本操作

以下是对Xml的 一些简单的操作

3.1 新增节点与属性

         public void Create(string xmlPath)
{
XDocument xDoc = XDocument.Load(xmlPath);
XElement xElement = xDoc.Element("BookStore");
xElement.Add(new XElement("Test", new XAttribute("Name", "Zery")));
xDoc.Save(xmlPath);
}

属性

          public void CreateAttribute(string xmlPath)
{
XDocument xDoc = XDocument.Load(xmlPath);
IEnumerable<XElement> xElement = xDoc.Element("BookStore").Elements("Book");
foreach (var element in xElement)
{
element.SetAttributeValue("Name", "Zery");
}
xDoc.Save(xmlPath);
}

3.2 删除节点与属性

         public void Delete(string xmlPath)
{
XDocument xDoc = XDocument.Load(xmlPath);
XElement element = (XElement)xDoc.Element("BookStore").Element("Book");
element.Remove();
xDoc.Save(xmlPath);
}

属性

         public void DeleteAttribute(string xmlPath)
{
XDocument xDoc = XDocument.Load(xmlPath);
//不能跨级取节点
XElement element = xDoc.Element("BookStore").Element("Book").Element("Name");
element.Attribute("BookName").Remove();
xDoc.Save(xmlPath);
}

3.3 修改节点属性

节点.net没提供修改的方法本文也不做处理

修改属性与新增实质是同一个方法

         public void ModifyAttribute(string xmlPath)
{
XDocument xDoc = XDocument.Load(xmlPath);
XElement element = xDoc.Element("BookStore").Element("Book");
element.SetAttributeValue("BookName","ZeryTest");
xDoc.Save(xmlPath);
} http://www.cnblogs.com/youring2/archive/2008/12/08/1350319.html

常用公共属性: 

属性

说明

Attributes

MSDN:获取一个 XmlAttributeCollection,它包含该节点的属性。

注:对一个Xml节点操作的时候,返回的就是该节点的所有属性列表,可以通过下标访问,也可以通过属性名访问。

ChildNodes

MSDN:获取节点的所有子节点。

注:通过这个属性可以访问指定节点的所有子节点。

DocumentElement

MSDN:获取文档的根 XmlElement。

注:当文档有注释或者说明时候,必须通过该属性得到文档的根节点。如果文档只包含一个顶级节点,也可以通过FirstChild得到根。

FirstChild

MSDN:获取节点的第一个子级。

注:得到指定节点的第一个子节点。

NextSibling

MSDN:获取紧接在该节点之后的节点。

注:得到当前节点的下一个节点。

LastChild

MSDN:获取节点的最后一个子级。

注:获得当前节点的最后一个子节点。

InnerText

MSDN:获取或设置节点及其所有子节点的串联值。

注:得到所有子节点的值。这些值是串联起来的。类型为String。

InnerXml

MSDN:已重写。获取或设置表示当前节点子级的标记。

注:得到所有子节点的一个字符串。

OuterXml

MSDN:获取表示此节点及其所有子节点的标记。

注:得到包含当前节点的一个字符串。

Value

MSDN:获取或设置节点的值。

注:对节点的值进行操作。

表1、XmlDocument类常用属性

常用公共方法:

方法

说明

Load

MSDN:加载指定的 XML 数据。

注:加载一个Xml数据。可以从Stream中加载,也可以从文件加载。它具有四个重载。

LoadXml

MSDN:从指定的字符串加载 XML 文档。

注:从字符串加载Xml文档。如果该字符串不是Xml格式,则抛出异常。

AppendChild

MSDN:将指定的节点添加到该节点的子节点列表的末尾。

注:添加一个孩子节点。

CreateElement

MSDN:创建 XmlElement。

注:创建一个节点。该方法必须由Xml文档调用。

Save

MSDN:将 XML 文档保存到指定的位置。

注:保存Xml文档。可以保存到文件,也可以保存到数据流中。该方法同样有四个重载。

SelectNodes

MSDN:选择匹配 XPath 表达式的节点列表。

注:得到指定路径的所有节点列表。

SelectSingleNode

MSDN:选择匹配 XPath 表达式的第一个 XmlNode。

注:得到指定路径的第一个节点。即SelectNodes方法的列表的第一个元素。

表2、XmlDocument类常用方法

通过XmlDocument读写Xml文档参考地址的更多相关文章

  1. C#操作Xml:通过XmlDocument读写Xml文档

    什么是Xml? Xml是扩展标记语言的简写,是一种开发的文本格式.关于它的更多情况可以通过w3组织了解http://www.w3.org/TR/1998/REC-xml-19980210.如果你不知道 ...

  2. dom4j读写XML文档

    dom4j 最常用最简单的用法(转) 要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4j包下载地址:http:/ ...

  3. python+selenium自动化软件测试(第12章):Python读写XML文档

    XML 即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进 行定义的源语言.xml 有如下特征: 首先,它是有标签对组成:<aa></aa> ...

  4. 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)

    在做对ReprotViewer编程时,想做一个用户可以更改显示/打印列的功能,大致看了下,只需要通过对rdlc文件中改变其<Hidden>节点值为false/true,即可实现对应某列的显 ...

  5. C#操作Xml:XSLT语法 在.net中使用XSLT转换xml文档示例

    XSL即可扩展的样式表文件. 可以格式化xml的显示,也可以将xml转换成需要的另一种格式. 学习XSL必须熟悉XPath.XSL和XPath一样简单强大,容易学习. 1. XSL既然可以格式化xml ...

  6. iOS网络编程笔记——XML文档解析

    今天利用多余时间研究了一下XML文档解析,虽然现在移动端使用的数据格式基本为JSON格式,但是XML格式毕竟多年来一直在各种计算机语言之间使用,是一种老牌的经典的灵活的数据交换格式.所以我认为还是很有 ...

  7. 【Win 10应用开发】把文件嵌入到XML文档

    把文件内容嵌入(或存入)到XML文档中,相信很多朋友会想到把字节数组转化为Base64字符串,再作为XML文档的节点.不过,有人会说了,转化后的base64字符串中含有像“+”这样的符号,写入到XML ...

  8. 文档对象模型操作xml文档

    简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...

  9. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

随机推荐

  1. JavaScript如何获取/计算页面元素的offset?

    问题  通过点击一控件,在控件的下面显示一个浮动层,通常的做法是:获取此控件的offset值,再计算出浮动层的top,left等css属性的值,赋值即可. 那么下面就看一下如何获取控件的offset值 ...

  2. UVa-Ecological Premium

    题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. jenkins双向备份;高可用部署;

    如果把一个Jenkins的整个目录赋值到另一个Jenkins的目录,则需要务必保持两个Jenkins版本是相同的,不然容易出现Jenkins插件兼容性问题. 另外使用inotify+rsync备份的时 ...

  4. iOS:网络编程解析协议一:HTTP超文本传输协议

    HTTP传输数据有四种方式:Get方式.Post方式.同步请求方式.异步请求方式.具体的介绍,前面已经有过系统的讲解,这次主要进行具体的举. 说明:同步和异步请求方式在创建链接对象和创建请求对象时,用 ...

  5. Python 字符串前面加'r'

    在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转意backslash '\' . 例如,\n 在raw string中,是两个字符,\和n ...

  6. FishEye

  7. Servlet学习笔记(三):HTTP请求与响应

    一.HTTP请求常用方法: Cookie[] getCookies()返回一个数组,包含客户端发送该请求的所有的 Cookie 对象. Enumeration getAttributeNames()返 ...

  8. 设置tomcat配置文件,在Myeclipse中修改jsp文件之后不用重启tomcat

    在Myeclipse中创建的Web程序在修改类或者jsp页面后需要重动ttomcat的,要重新加载一次的,即重新启动tomcat一次.重启时比较慢,及浪费资源及时间, 设置tomcat配置文件,在My ...

  9. js版根据经纬度计算多边形面积(墨卡托投影)

    [摘要:var earthRadiusMeters = 6371000.0; var metersPerDegree = 2.0 * Math.PI * earthRadiusMeters / 360 ...

  10. Android -- 再来一发Json

    之前写过一篇Json的博客,当时用的是Gson包来解析的,这次来此自带的org.json来解析.传送门:<Gson解析复杂Json数据> JSON的结构 (1) Name/Value Pa ...