/// <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. node.js&pm2搭建node生产环境

    node.js下载地址https://nodejs.org/en/download/stable/ 下载截图 建议采用稳定编译过的版本,source code稍麻烦,编译过的直接可用,安装超级简单,红 ...

  2. AC-PC线(前联合-后联合线)

    下面利用一张大脑矢状面(侧视图)来描述ac-pc的空间位置关系.前联合用红色点表示,后联合用黄色表示. 在Talairach 模板的官方文档中,AC-PC线从前联合AC的表面出发,延伸到后联合PC的中 ...

  3. Out of memory: Kill process 内存不足

    服务直接被 killed,感觉特别奇怪.代码肯定是没有问题的,但为什么放到服务器上就出错了呢. 部署时报错如下: Failed to add the deployment content to the ...

  4. Scurm 术语

    角色 Product Owner Scrum Master Team 工件(Backlog) Product Backlog Sprint Backlog Burndown Backlog 活动 Sp ...

  5. Java Memory Management Skill List

    Java内存管理小技巧: 尽量使用直接量 当需要使用字符串,还有Byte,Short,Integer,Long,Float,Double,Boolean,Character包装类的实例时,程序不应该采 ...

  6. django 基础知识回顾

    内容回顾: 1. ajax参数 url: type: data: 1.value不能是字典 {k1:'v1',k2:[1,2,3,],k3; JSON.string} 2.$('').serilize ...

  7. linux 网络设备驱动

    linux 网络驱动 谨以此文纪念过往的岁月 一.前言在linux中网络驱动也是一个大头,如何去理解网络驱动是作为一个linux驱动工程师必备的技能.不过同样的设备,在不同人的手中会有不同的效果,其原 ...

  8. 什么是vBlock

    Vblock产品是指一种建立系统的方式,Vblock提供的是一个集成包,是一种完整的IT基础架构,并不是一个具体的设备. 具体点就是:Vblock是一个融合了思科服务器与网络.EMC存储系统与管理软件 ...

  9. 详细记录ASP.NET中的图象处理

    最近做网站时,要求上传能加上水印,就研究了一下相关的功能.推荐一下程序人生的网站,大家也可以写一些开发感悟在上面.在使用ASP的时候,我们时常要借助第三方控件来实现一些图象功能.而现在,ASP.NET ...

  10. JS中字符串的相关操作

    一.字符串的创建 创建一个字符串有几种方法.最简单的是用引号将一组字符包含起来,可以将其赋值给一个字符串变量. var myStr = "Hello, String!"; 可以用双 ...