⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlparser.cs

📁 基于DotNet的开源工作流引擎
💻 CS
字号:
using System;
using System.Collections;
using System.IO;
using System.Xml;
using log4net;

namespace NetBpm.Util.Xml
{
	/// <summary> convenience class for parsing and/or validating xml documents.
	/// </summary>
	public class XmlParser
	{
		private static readonly ILog log = LogManager.GetLogger(typeof (XmlParser));

		private XmlReader _xmlreader;
		private bool isConsumed = false;
		private bool validate_Renamed_Field = true;
		private IList _elementStack;

		public bool Validation
		{
			set { this.validate_Renamed_Field = value; }
		}

		/// <summary> creates an XmlParser for an inputStream (conaining an xml-document).
		/// @throws NullPointerException if inputStream is null. 
		/// @portme
		/// </summary>
		public XmlParser(Stream xmlstream)
		{
			if (xmlstream == null)
			{
				throw new NullReferenceException("couldn't create an XmlParser with a null-value for xmlreader");
			}
			this._xmlreader = new XmlTextReader(xmlstream);
		}

		/// <summary> creates an XmlParser for an inputStream (conaining an xml-document).
		/// @throws NullPointerException if inputStream is null. 
		/// @portme
		/// </summary>
		public XmlParser(XmlReader xmlreader)
		{
			if (xmlreader == null)
			{
				throw new NullReferenceException("couldn't create an XmlParser with a null-value for xmlreader");
			}
			this._xmlreader = xmlreader;
		}

		/// <summary> creates an XmlParser for an inputStream (conaining an xml-document).
		/// @throws NullPointerException if reader is null. 
		/// </summary>
		public XmlParser(String xmlstring)
		{
			if (xmlstring == null)
			{
				throw new NullReferenceException("couldn't create an XmlParser with a null-value for xml");
			}
			StringReader ts = new StringReader(xmlstring);
			this._xmlreader = new XmlTextReader(ts);
		}

		/// <summary> validates an xml-document without building a XmlElement's for the parsed contents.</summary>
		public void Validate()
		{
//			this.validate_Renamed_Field = true;
//			this.parse_Renamed_Field = false;
			Parse();
		}

		/// <summary> parses and/or validates an xml document.
		/// @throws IllegalStateException if this parser has already been used before.  It can only be
		/// used once because the inputSource can be read only once.
		/// </summary>
		public XmlElement Parse()
		{
			if (isConsumed)
			{
				throw new SystemException("this XmlParser-instance has already been used, please create a new one for each usage");
			}
			XmlElement rootElement = null;
			_elementStack = new ArrayList();

			while (_xmlreader.Read())
			{
				switch (_xmlreader.NodeType)
				{
					case XmlNodeType.Element:
						XmlElement newElement = new XmlElement(_xmlreader.Name);
						bool isEmptyElement = _xmlreader.IsEmptyElement;

						Hashtable attributes = new Hashtable();
						if (_xmlreader.HasAttributes)
						{
							for (int i = 0; i < _xmlreader.AttributeCount; i++)
							{
								_xmlreader.MoveToAttribute(i);
								attributes.Add(_xmlreader.Name, _xmlreader.Value);
							}
						}

						newElement.Attributes = attributes;

						int elementStackSize = _elementStack.Count;
						if (elementStackSize > 0)
						{
							XmlElement containingElement = (XmlElement) _elementStack[_elementStack.Count - 1];
							containingElement.AddChild(newElement);
						}
						else
						{
							rootElement = newElement;
						}

						_elementStack.Add(newElement);

						if (isEmptyElement)
						{
							_elementStack.RemoveAt(_elementStack.Count - 1);
						}
						break;
					case XmlNodeType.EndElement:
						_elementStack.RemoveAt(_elementStack.Count - 1);
						break;
					case XmlNodeType.Text:
						if (_xmlreader.Value.Length > 0)
						{
							XmlElement element = (XmlElement) _elementStack[_elementStack.Count - 1];
							element.AddText(_xmlreader.Value);
						}
						break;
				}
			}
			isConsumed = true;
			return rootElement;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -