XMLUtil.cs
上传用户:szltgg
上传日期:2019-05-16
资源大小:604k
文件大小:4k
源码类别:

Telnet服务器

开发平台:

C#

  1. /*
  2. * Copyright (c) 2005 Poderosa Project, All Rights Reserved.
  3. * $Id: XMLUtil.cs,v 1.2 2005/04/20 08:45:48 okajima Exp $
  4. */
  5. using System;
  6. using System.Collections;
  7. using System.Xml;
  8. using System.Text;
  9. namespace Poderosa.Toolkit
  10. {
  11. public class XMLUtil
  12. {
  13. public static XmlWriter CreateDefaultWriter(string filename) {
  14. XmlTextWriter wr = new XmlTextWriter(filename, Encoding.Default);
  15. wr.Formatting = Formatting.Indented;
  16. wr.Indentation = 2;
  17. wr.IndentChar = ' ';
  18. wr.Namespaces = true;
  19. wr.WriteStartDocument(); //XML PI
  20. return wr;
  21. }
  22. public static XmlReader CreateDefaultReader(string filename) {
  23. XmlTextReader re = new XmlTextReader(filename);
  24. re.WhitespaceHandling = WhitespaceHandling.Significant;
  25. return re;
  26. }
  27. public static XmlDocument FileToDOM(string filename) {
  28. XmlDocument doc = new XmlDocument();
  29. doc.Load(filename);
  30. return doc;
  31. }
  32. public static bool FindNode(XmlReader reader, XmlNodeType type) {
  33. do {
  34. if(reader.NodeType==type) return true;
  35. } while(reader.Read());
  36. return false;
  37. }
  38. //傆偮偆巊傢側偄梫慺傪僗僉僢僾偟側偑傜撉傓僞僀僾偺Read
  39. public static bool ReadSubstantialNode(XmlReader reader) {
  40. do {
  41. if(!reader.Read())
  42. return false;
  43. XmlNodeType nt = reader.NodeType;
  44. if(nt==XmlNodeType.Attribute || nt==XmlNodeType.CDATA || nt==XmlNodeType.Element || nt==XmlNodeType.EndElement
  45. || nt==XmlNodeType.SignificantWhitespace || nt==XmlNodeType.Text || nt==XmlNodeType.Whitespace) return true;
  46. } while(true);
  47. }
  48. //<a>aaa</a><b>bbb</b>... 偲偄偆宍幃偑懕偔尷傝result偵捛壛偡傞
  49. public static void ReadElementsIntoStrMap(XmlReader reader, Hashtable result) {
  50. while(ReadSubstantialNode(reader) && reader.NodeType!=XmlNodeType.EndElement) {
  51. string name = null, value = null;
  52. do {
  53. if(reader.NodeType==XmlNodeType.Element) {
  54. name = reader.LocalName;
  55. if(reader.IsEmptyElement) break;
  56. }
  57. else if(reader.NodeType==XmlNodeType.Text || reader.NodeType==XmlNodeType.CDATA)
  58. value = reader.Value;
  59. else if(reader.NodeType==XmlNodeType.EndElement) {
  60. result.Add(name, value);
  61. break;
  62. }
  63. } while(ReadSubstantialNode(reader));
  64. }
  65. }
  66. //傾僩儕價儏乕僩傪Hashtable偵擖傟傞
  67. public static void ReadAttributesIntoStrMap(XmlReader reader, Hashtable result) {
  68. if(!reader.MoveToFirstAttribute()) return;
  69. do {
  70. result.Add(reader.LocalName, reader.Value);
  71. } while(reader.MoveToNextAttribute());
  72. reader.MoveToElement();
  73. }
  74. public static bool MoveToStartElement(XmlReader reader, string name, string nsuri) {
  75. while(reader.NodeType!=XmlNodeType.Element || reader.LocalName!=name || reader.NamespaceURI!=nsuri) {
  76. if(!ReadSubstantialNode(reader)) return false;
  77. }
  78. return true;
  79. }
  80. public static bool MoveNextToStartElement(XmlReader reader, string name, string nsuri) {
  81. while(reader.NodeType!=XmlNodeType.Element || reader.LocalName!=name || reader.NamespaceURI!=nsuri) {
  82. if(!ReadSubstantialNode(reader)) return false;
  83. }
  84. return ReadSubstantialNode(reader); //尒偮偐偭偨StartElement偺師偵堏摦
  85. }
  86. public static bool MoveNextToStartElement(XmlReader reader, string name) {
  87. while(reader.NodeType!=XmlNodeType.Element || reader.LocalName!=name) {
  88. if(!ReadSubstantialNode(reader)) return false;
  89. }
  90. return ReadSubstantialNode(reader); //尒偮偐偭偨StartElement偺師偵堏摦
  91. }
  92. public static bool MoveNextToEndElement(XmlReader reader) {
  93. while(reader.NodeType!=XmlNodeType.EndElement) {
  94. if(reader.IsEmptyElement) break;
  95. if(!ReadSubstantialNode(reader)) return false;
  96. }
  97. return ReadSubstantialNode(reader); //尒偮偐偭偨EndElement偺師偵堏摦
  98. }
  99. }
  100. }