ASP.NET XmlDocument类详解(2)_.Net教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:asp.net通过配置文件连接Access的方法
本文实例讲述了asp.net通过配置文件连接Access的方法。分享给大家供大家参考。具体分析如下: 这里数据库blog.mdb存放在App_Data中 配置文件 ? cs 中 调用: ? 希望本文所述对大家的asp.net程序设计有所帮助。

  Normalize              将此 XmlNode 下子树完全深度中的所有 XmlText 节点都转换成“正常”形式,在这种形式中只有标记(即标记、注释、处理指令、                    CDATA 节和实体引用)分隔 XmlText 节点,也就是说,没有相邻的 XmlText 节点。 (继承自 XmlNode。)

  PrependChild             将指定的节点添加到该节点的子节点列表的开头。 (继承自 XmlNode。)

  ReadNode              根据 XmlReader 中的信息创建一个 XmlNode 对象。读取器必须定位在节点或属性上。

  RemoveAll              移除当前节点的所有子节点和/或属性。 (继承自 XmlNode。)

  RemoveChild             移除指定的子节点。 (继承自 XmlNode。)

  ReplaceChild             用 newChild 节点替换子节点 oldChild。 (继承自 XmlNode。)

  Save                 已重载。 将 XML 文档保存到指定的位置。

  SelectNodes             已重载。

  SelectSingleNode           已重载。

  Supports               测试 DOM 实现是否实现特定的功能。 (继承自 XmlNode。)

  Validate               已重载。 验证 XmlDocument 是不是 Schemas 属性中包含的 XML 架构定义语言 (XSD) 架构。

  WriteContentTo           将 XmlDocument 节点的所有子级保存到指定的 XmlWriter 中。 (重写 XmlNode..::.WriteContentTo(XmlWriter)。)

  WriteTo               将 XmlDocument 节点保存到指定的 XmlWriter。 (重写 XmlNode..::.WriteTo(XmlWriter)。)

  三、事件

  NodeChanged        当属于该文档的节点的 Value 已被更改时发生。

  NodeChanging       当属于该文档的节点的 Value 将被更改时发生。

  NodeInserted        当属于该文档的节点已被插入另一个节点时发生。

  NodeInserting        当属于该文档的节点将被插入另一个节点时发生。

  NodeRemoved        当属于该文档的节点已被从其父级移除时发生。

  NodeRemoving       当属于该文档的节点将被从文档中移除时发生。

  助记属性:

  PreviousSibling  上一个兄弟节点

  NextSibling    下一个兄弟节点

  FirstChild     第一个子节点

  LastChild     最后一个子节点

  ChildNodes    子节点集合

  ParentNode    父节点

  代码示例:

  xml文档:

   代码如下:

  

  

 

  张三

  12000

<price>42

  

 

  代码:

  代码如下:

  static void Main(string[] args)

  {

  XmlDocument doc = new XmlDocument();

  doc.Load(@"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\Test.xml");

  //先获取一个唯一的Article节点,再获取其下的第一个子节点 然后再获取该节点下的属性集合

  XmlAttributeCollection xc = doc.SelectSingleNode("Article").FirstChild.Attributes;

  string age = xc[0].Value; //不过是一个定制的集合罢了,还是集合那套东西 //string age = xc["age"].Value; 支持两种索引访问

  Console.WriteLine(age); //输出30

  string baseuri = doc.SelectSingleNode("Article").FirstChild.BaseURI;

  Console.WriteLine(baseuri); //输出 file:///C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\Test.xml

  XmlNodeList listNode = doc.SelectSingleNode("Article").ChildNodes; //获取Article节点下的所有节点列表

  for (int i = 0; i < listNode.Count;i++ ) //XmlNodeList不支持foreach遍历,只能用for

  {

  Console.Write(listNode[i].Name + " : " + listNode[i].InnerText); //输出 author:张三 length:12000 price:30 Name获取的是限定名,也就是标记名称

  }

  XmlElement xe = doc.DocumentElement; //获取根节点

  Console.WriteLine(xe.Name); //输出 Article

  //XmlDocumentType xdt = doc.DocumentType; //获取包含 DOCTYPE 声明的节点。应该是由DTD限定的节点。

  //Console.Write(xdt.Name); //此处报 未将对象引用设置到对象的实例,因为找不到有DOCTYPE声明的元素

  Console.WriteLine(doc.HasChildNodes); //输出 True 当前Document是否包含子节点。

  //XmlImplementation xi = doc.Implementation; //不懂怎么用

  //xi.ToString();

  Console.WriteLine(doc.InnerText); //获取当前文档的内容 输出 张三 12000 30

  Console.WriteLine(doc.InnerXml); //输出 整个Xml文件的字符串内容

  Console.WriteLine(doc.IsReadOnly); //获取当前文档是否是只读的。输出 False

  XmlNode node = doc.LastChild;

  Console.WriteLine(node.InnerText); //输出 张三 12000 30 因为最后一个节点是Article节点,输出Article节点的所有内容

  Console.WriteLine(doc.LocalName); //输出 #document

  Console.WriteLine(doc.SelectSingleNode("Article").Name); //输出Article

  Console.WriteLine(doc.SelectSingleNode("Article").FirstChild.NextSibling.Name); //length author的下一个兄弟节点 是length

  XmlNodeType xnt = doc.SelectSingleNode("Article").NodeType;

  Console.WriteLine(xnt); //输出Element,表明该节点是元素节点

  string str = doc.SelectSingleNode("Article").OuterXml; //此节点及其所有自己点标记,输出Article节点的所有内容

省略...

 

  Console.WriteLine(str);

  XmlDocument x = new XmlDocument();

  x.LoadXml(str);

  Console.WriteLine(doc.SelectSingleNode("Article").OwnerDocument); //获取该节点所属的XmlDocument

  XmlNode xn = doc.SelectSingleNode("Article").LastChild.ParentNode; //ParentNode获取直接父节点。

  Console.WriteLine(xn.Name); //输出 Article

  Console.WriteLine(doc.PreserveWhitespace); //是否保留空白 输出False

  XmlNode xn1 = doc.SelectSingleNode("Article").LastChild.PreviousSibling;

  Console.WriteLine(xn1.Name); //输出length 的确是最后一个节点的前一个节点。

  Console.ReadKey();

  }

  为了更加好的展示一些属性,现在将xml换成这样:

   代码如下:

  

  

  

  张三

  12000

  42

  

  代码如下:

   代码如下:

  static void Main(string[] args)

  {

  XmlDocument doc = new XmlDocument();

  doc.Load(@"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\Test.xml");

  XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);

  xnm.AddNamespace("h", "http://www.xxx.com/");

  XmlNode Article = doc.SelectSingleNode("h:Article", xnm);

  string namespace1 = Article.InnerText;

  Console.WriteLine(namespace1); //输出 张三 12000 30

  Console.WriteLine(Article.Prefix); //输出 h 获取当前节点的前缀

  Console.WriteLine(Article.NamespaceURI); //输出 http://www.xxx.com/123 获取当前节点所在的命名空间

  Console.WriteLine(Article.FirstChild.Name + "---" + Article.FirstChild.Value + "---" + Article.FirstChild.LocalName);

  //以上一行代码输出 h:author------author

  //SchemaInfo 返回节点的后架构验证信息集 (PSVI)。//Value 获取或设置节点的值。 (继承自 XmlNode。)

  //XmlResolver 设置 XmlResolver 以用于解析外部资源。

  Console.ReadKey();

  }

  再来一个展示一下Schemas这个常用的属性

   代码如下:

  static void Main(string[] args)

  {

  XmlDocument doc = new XmlDocument(); //创建文档

  doc.Schemas.Add(null, @"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\person.xsd"); //添加一个架构对象到本XmlDocument

  doc.Load(@"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\person.xml"); //加载xml文件

  Console.WriteLine(doc.Schemas.Count); //输出1 就是第二行添加的那个

  Console.WriteLine(doc.SchemaInfo.MemberType);

  //XmlResolver 设置 XmlResolver 以用于解析外部资源。

  Console.ReadKey();

  }

  下面来试下XmlDocument的方法

  Test.xml的代码如下:

   代码如下:

  

  

  

  1

  

  罗贯中

  2005

38.5

  

  

  2

  

  吴承恩

  2004

37.5

  

  

  主程序代码如下:

  代码如下:

  static void Main(string[] args)

  {

  XmlDocument doc = new XmlDocument(); //创建文档

  doc.Load(@"C:\Users\Administrator\Desktop\ConsoleApplication1\ConsoleApplication1\Test.xml"); //加载xml文件

  XmlNode node1 = doc.CreateNode(XmlNodeType.Element, "pagecount", null);

  node1.InnerText = "222";

  doc.SelectSingleNode("/bookstore").AppendChild(node1); //执行之后 222 元素被添加到前面

  doc.Save(@"D:\123.xml");

  XmlNode node2 = doc.SelectSingleNode("/bookstore/book[1]/title[1]").Clone(); //克隆一个节点出来

  Console.WriteLine(node2.InnerText); //输出三国演义

  XmlNode node3 = doc.SelectSingleNode("/bookstore/book[1]/title[1]").CloneNode(true); //参数决定是否克隆子节点数(如果false,文本节点也不克隆)

  Console.WriteLine(node3.InnerText); //输出三国演义

  XmlAttribute attr = doc.CreateAttribute("age"); //创建一个age属性

  attr.Value = "23";

  doc.SelectSingleNode("/bookstore/book[1]/author[1]").Attributes.Append(attr); //执行之后第一个作者变为 罗贯中

  doc.Save(@"D:\123.xml");

  XmlCDataSection cdata = doc.CreateCDataSection("我&你");

  doc.SelectSingleNode("/bookstore/book[1]/author[1]").AppendChild(cdata); //执行之后author变为罗贯中

  doc.Save(@"D:\123.xml");

  XmlComment com = doc.CreateComment("2013-2-27 22:37:25");

  doc.SelectSingleNode("/bookstore/book[1]/title[1]").AppendChild(com); //执行之后title变为

  doc.Save(@"D:\123.xml");

  XmlDocument doc1 = new XmlDocument();

  XmlDocumentFragment xdf = doc1.CreateDocumentFragment(); //一个xml片段,这个类敢情好用

  xdf.InnerXml = "widget";

  doc1.AppendChild(xdf);

  Console.WriteLine(doc1.OuterXml); //输出widget

  //CreateDefaultAttribute        创建具有指定前缀、本地名称和命名空间 URI 的默认属性。

  //CreateDocumentType        返回新的 XmlDocumentType 对象。

  XmlDocument doc2 = new XmlDocument();

  XmlElement element = doc2.CreateElement("title"); //创建一个title 如果现在保存是输出&h;

  XPathNavigator nav = doc2.CreateNavigator(); //一个通过光标的导航模型遍历XML文档的数据

  XmlText text = doc2.CreateTextNode("你好啊"); //创建一个文本节点

  doc2.SelectSingleNode("/title").AppendChild(text);

  Console.WriteLine(doc2.OuterXml); //输出&h;你好啊

  XmlWhitespace xws = doc2.CreateWhitespace(" "); //创建一个空白节点

  doc2.SelectSingleNode("/title").AppendChild(xws);

  Console.WriteLine(doc2.OuterXml); //输出&h;你好啊

  XmlDeclaration xd = doc2.CreateXmlDeclaration("1.0", "utf-8", "yes"); //xml头 XML声明部分

  XmlNode root = doc2.SelectSingleNode("/title");

  doc2.InsertBefore(xd, root);

  Console.WriteLine(doc2.OuterXml); //执行之后 在头部加入了

  XmlSignificantWhitespace xsw = doc2.CreateSignificantWhitespace(" ");

  XmlElement ele = doc2.CreateElement("white");

  ele.InnerText = "空白啊空白";

  ele.AppendChild(xsw);

  doc2.SelectSingleNode("/title").AppendChild(ele);

  Console.WriteLine(doc2.OuterXml); //还是添加一大堆空白,不知道与CreateWhitespace有什么区别

  XmlDocument doc3 = new XmlDocument();

  String PItext = "type='text/xsl' href='book.xsl'";

  XmlProcessingInstruction newPI = doc3.CreateProcessingInstruction("xml-stylesheet", PItext);

  doc3.AppendChild(newPI);

  Console.WriteLine(doc3.OuterXml); //输出

  //GetElementById           获取具有指定 ID 的 XmlElement。

  //GetElementsByTagName       已重载。 返回一个 XmlNodeList,它包含与指定名称匹配的所有子代元素的列表。

  //GetEnumerator            提供对 XmlNode 中节点上“for each”样式迭代的支持。 (继承自 XmlNode。)

  //GetNamespaceOfPrefix        查找当前节点范围内离给定的前缀最近的 xmlns 声明,并返回声明中的命名空间 URI。 (继承自 XmlNode。)

  //GetPrefixOfNamespace        查找当前节点范围内离给定的命名空间 URI 最近的 xmlns 声明,并返回声明中定义的前缀。 (继承自 XmlNode。)

  //ImportNode             将节点从另一个文档导入到当前文档。

  //InsertAfter              将指定的节点紧接着插入指定的引用节点之后。 (继承自 XmlNode。)

  //InsertBefore             将指定的节点紧接着插入指定的引用节点之前。 (继承自 XmlNode。)

  //LoadXml               从指定的字符串加载 XML 文档。

分享:asp.net水晶报表参数字段在代码中赋值的方法
本文实例讲述了asp.net水晶报表参数字段在代码中赋值的方法。分享给大家供大家参考。具体实现方法如下: ? 下面是我自己的应用: ? 第一段代码有两个参数字段,第二个代码有一个参数字段。 希望本文所述对大家的asp.net程序设计有所帮助。

来源:模板无忧//所属分类:.Net教程/更新时间:2015-05-22
相关.Net教程