using System;
using System.IO;
using System.Xml;
using System.Data;

namespace SiaSun.LMS.Common
{
	/// <summary>
	/// XmlFiles 的摘要说明。
	/// </summary>
	public class XmlFiles:XmlDocument
	{
		#region 字段与属性
		private string _xmlFileName;
		public string XmlFileName
		{
			set{_xmlFileName = value;}
			get{return _xmlFileName;}
		}
		#endregion

        #region     ------构造函数

        /// <summary>
        /// 构造函数
        /// </summary>
        public XmlFiles() { }

        /// <summary>
        /// 构造函数
        /// </summary>
		public XmlFiles(string xmlFile)
		{
			XmlFileName = xmlFile;			
			this.Load(xmlFile);
		}

        #endregion

        #region     ------查找节点

        /// <summary>
		/// 给定一个节点的xPath表达式并返回一个节点
		/// </summary>
        /// <param name="xPath">路径</param>
		/// <returns></returns>
		public XmlNode FindNode(string xPath)
		{
			XmlNode xmlNode = this.SelectSingleNode(xPath);
			return xmlNode;
		}

		/// <summary>
		/// 给定一个节点的xPath表达式返回其值
		/// </summary>
        /// <param name="xPath">路径</param>
		public string GetNodeValue(string xPath)
		{
			XmlNode xmlNode = this.SelectSingleNode(xPath);
			return xmlNode.InnerText;
		}

		/// <summary>
		/// 给定一个节点的表达式返回此节点下的孩子节点列表
		/// </summary>
        /// <param name="xPath">路径</param>
		public XmlNodeList GetNodeList(string xPath)
		{
            XmlNodeList nodeList = this.SelectSingleNode(string.Format("descendant::Table[@Name='{0}']", xPath)).ChildNodes;
			return nodeList;
        }

        #endregion

        #region     ------根据XML获得DataTable

        /// <summary>
        /// 根据XML获得DataTable
        /// </summary>
        public DataTable GetDataTable(string sXml)
        {
            XmlParserContext context = new XmlParserContext(null, null, null, XmlSpace.None);
            XmlTextReader reader = new XmlTextReader(sXml, XmlNodeType.Document, context);
            DataSet ds = new DataSet();
            ds.ReadXml(reader);
            return (ds.Tables.Count > 1) ? ds.Tables[1] : null;
        }
        #endregion
    }
}