xml處理的一個常用類

using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Windows.Forms;

namespace XmlProcess
{
 /// <summary>
 /// XML文件操作
 /// </summary>
 public sealed class XmlProcess
 {
  #region 私有變量
  /// <summary>
  /// 待操作的xml文件路徑
  /// </summary>
  private string xmlFileName = string.Empty;
  /// <summary>
  /// xml的根元素
  /// </summary>
  private string rootNodeName = string.Empty;
  /// <summary>
  /// xml文檔對象
  /// </summary>
  private XmlDocument XmlDoc = new XmlDocument();

  #endregion

  #region 公共變量

  

  #endregion

  #region 構造函數

  /// <summary>
  /// 指明所關聯的xml文件的構造函數
  /// </summary>
  /// <param name="fileFullName">XML文件的全路徑名(包括文件名)</param>
  /// <remarks></remarks>
  public XmlProcess(string fileFullName)
  {
   xmlFileName = fileFullName;
   try
   {
    XmlDoc.Load(fileFullName);
    rootNodeName += XmlDoc.DocumentElement.Name;
   }
   catch
   {
    throw new XmlException("XMLファイルを見つけてないです、確認してください。");
   }
  }

  #endregion

  #region 屬性
  
  /// <summary>
  /// 關聯的xml文件名
  /// </summary>
  public string XmlFileName
  {
   get
   {
    return xmlFileName;
   }
  }

  /// <summary>
  /// 根元素名
  /// </summary>
  public string RootNodeName
  {
   get
   {
    return rootNodeName;
   }
  }

  #endregion

  #region 公共方法

  #region AddNode

  /// <summary>
  /// 添加新節點
  /// </summary>
  /// <param name="parentNode">父節點名</param>
  /// <param name="nodeName">新節點名</param>
  /// <param name="nodeValue">新節點內容</param>
  /// <remarks>
  /// </remarks>  
  public int AddNode(string parentNode, string nodeName, string nodeValue)
  {
   try
   {
    XmlNode Root = XmlDoc.DocumentElement.SelectSingleNode(parentNode);
    if(Root != null)
    {
     XmlElement Element = XmlDoc.CreateElement(nodeName);    
     Element.InnerText = nodeValue.ToString();
     Root.AppendChild(Element);
     XmlDoc.Save(xmlFileName);
     return 0;//正常
    }
    else
    {
     return 1;//指定的節點不存在
    }
   }
   catch(XPathException ex)
   {    
    return 2;//節點路徑錯誤
   }
   catch(InvalidOperationException ex)
   {
    return 5;//插入節點與父節點衝突
   }
   catch(ArgumentException ex)
   {
    return 3;//XML文件無法寫入
   }
   catch(XmlException ex)
   {
    return 4;//XML文件保存失敗
   }
   catch(Exception ex)
   {
    return 99;//不明錯誤
   }
  }

  #endregion
  
  #region AddAttribute

  /// <summary>
  /// 添加屬性
  /// </summary>
  /// <param name="xPath">待添加屬性的位置</param>
  /// <param name="attrName">屬性名</param>
  /// <param name="attrValue">屬性內容</param>
  public int AddAttribute(string xPath, string attrName, string attrValue)
  { 
   try
   {
    //找到目標節點
    XmlNode Root = XmlDoc.DocumentElement.SelectSingleNode(xPath);
    if(Root != null)
    {
     //創建屬性節點並賦值
     XmlAttribute Attr = XmlDoc.CreateAttribute(attrName);
     Attr.InnerText = attrValue;
     //目標節點上追加屬性
     Root.Attributes.Append(Attr);
     //保存XML文件
     XmlDoc.Save(xmlFileName);
     return 0;
    }
    else
    {
     return 1;//指定的節點不存在
    }
   }
   catch(XPathException ex)
   {
    return 2;//節點路徑錯誤
   }
   catch(ArgumentException ex)
   {
    return 3;//XML文件無法寫入
   }
   catch(XmlException ex)
   {
    return 4;////XML文件保存失敗
   }
   catch(Exception ex)
   {
    return 99;//不明錯誤
   }
  }

  #endregion

  #region AlterAttribute

  /// <summary>
  /// 修改屬性內容,如果指定屬性不存在則不修改
  /// </summary>
  /// <param name="xPath">待修改屬性的節點</param>
  /// <param name="attrName">待修改的屬性名</param>
  /// <param name="attrValue">新屬性值</param>
  public int AlterAttribute(string xPath, string attrName, string attrValue)
  {
   return AlterAttribute(xPath, attrName, attrValue, false);
  }

  /// <summary>
  /// 修改屬性內容,如果指定屬性不存在則可以選擇該屬性是否追加
  /// </summary>
  /// <param name="xPath">待修改屬性的節點</param>
  /// <param name="attrName">待修改的屬性名</param>
  /// <param name="attrValue">新屬性值</param>
  /// <param name="addOrNot">true追加,fasle不追加</param>
  public int AlterAttribute(string xPath, string attrName, string attrValue, bool addOrNot)
  {  
   try
   {
    if(addOrNot)//屬性不存在時追加
    {
     //找到目標節點如果存在則進行屬性追加.成功返回0,不成功返回大於0的值.
     XmlNode Root = XmlDoc.DocumentElement.SelectSingleNode(xPath);     
     if(Root != null)
     {
      //創建屬性節點並賦值
      XmlAttribute Attr = XmlDoc.CreateAttribute(attrName);
      Attr.InnerText = attrValue;
      //追加屬性
      Root.Attributes.Append(Attr);
      //保存XML文件
      XmlDoc.Save(xmlFileName);
      return 0;
     }
     else
     {
      return 1;//指定的節點不存在
     }     
    }
    else//屬性不存在時不追加
    {
     //查找屬性如果存在則進行修改,不存在則不做任何處理.
     XmlAttribute Attr = XmlDoc.DocumentElement.SelectSingleNode(xPath).Attributes[attrName];
     if(Attr != null)
     {
      Attr.InnerText = attrValue;
      XmlDoc.Save(xmlFileName);      
     }
     return 0;
    }    
   }
   catch(XPathException ex)
   {
    return 2;//節點路徑錯誤
   }
   catch(ArgumentException ex)
   {
    return 3;//XML文件無法寫入
   }
   catch(XmlException ex)
   {
    return 4;////XML文件保存失敗
   }
   catch(Exception ex)
   {
    return 99;//不明錯誤
   }
  }

  #endregion
  
  #region DelNode

  /// <summary>
  /// 刪除節點
  /// </summary>
  /// <param name="xPath">指定節點</param>
  /// <param name="selfInclude">是否刪除指定節點的標籤,true表示刪除</param>
  public int DelNode(string xPath, bool selfInclude)
  {  
   try
   {
    XmlNode TargetNode = XmlDoc.DocumentElement.SelectSingleNode(xPath);
    if (TargetNode != null)
    {
     if(selfInclude)//整個節點全部刪除
     {
      XmlNode ParentNode = TargetNode.ParentNode;
      ParentNode.RemoveChild(TargetNode);
     }
     else//只刪除節點內容
     {
      TargetNode.RemoveAll();
     }
     //保存修改
     XmlDoc.Save(xmlFileName);
     return 0;//正確返回
    }
    else
    {
     return 1;
    }
   }
   catch(XPathException ex)
   {
    return 2;//節點路徑錯誤
   }
   catch(ArgumentException ex)
   {
    return 3;//XML文件無法寫入
   }
   catch(XmlException ex)
   {
    return 4;////XML文件保存失敗
   }
   catch(Exception ex)
   {
    return 99;//不明錯誤
   }
  }

  /// <summary>
  /// 指定某一ID屬性值的節點刪除.
  /// </summary>
  /// <param name="xPath">指定節點</param>
  /// <param name="attrNameValue">屬性值,</param>
  /// <param name="selfInclude">是否刪除指定節點的標籤,true表示刪除</param>
  public int DelNode(string xPath, string attrValue, bool selfInclude)
  {
   return DelNode(xPath, "ID", attrValue, selfInclude);
  }

  /// <summary>
  /// 指定某一ID屬性值的節點刪除.
  /// </summary>
  /// <param name="xPath">指定節點</param>
  /// <param name="attrName">屬性名</param>
  /// <param name="attrValue">屬性值</param>
  /// <param name="selfInclude">是否刪除指定節點的標籤,true表示刪除</param>
  /// <returns>成功返回0,失敗返回大於0的值</returns>
  public int DelNode(string xPath, string attrName, string attrValue, bool selfInclude)
  {
   //格式化節點路徑最終xPath = xPath[@attrName='attrValue']
   xPath = FormatXPath(xPath, attrName, attrValue);
   return DelNode(xPath, selfInclude);
  }

  #endregion

  #region DelNodes

  /// <summary>
  /// 一次刪除多個節點
  /// </summary>
  /// <param name="xPath">刪除節點的路徑</param>
  /// <param name="selfInclude">是否連同標籤一起刪除.true表示刪除.</param>
  public int DelNodes(string xPath, bool selfInclude)
  {
   try
   {
    //取得待刪除節點集
    XmlNodeList TargetNodes = XmlDoc.DocumentElement.SelectNodes(xPath);
    if(TargetNodes.Count >0)//存在滿足條件的節點,則將這些節點刪除
    {
     if(selfInclude)//刪除整個節點
     {
      foreach(XmlNode node in TargetNodes)
      {
       node.ParentNode.RemoveChild(node);
      }      
     }
     else//刪除節點內容
     {
      foreach(XmlNode node in TargetNodes)
      {
       node.RemoveAll();
      }     
     }
     //保存修改
     XmlDoc.Save(xmlFileName);
     return 0;//正常返回
    }
    else
    {
     return 1;//待刪除節點不存在
    }
   }
   catch(XPathException ex)
   {
    return 2;//節點路徑錯誤
   }
   catch(ArgumentException ex)
   {
    return 3;//XML文件無法寫入
   }
   catch(XmlException ex)
   {
    return 4;////XML文件保存失敗
   }
   catch(Exception ex)
   {
    return 99;//不明錯誤
   }
  }

  /// <summary>
  /// 指定屬性的多個節點刪除
  /// </summary>
  /// <param name="xPath">刪除節點的路徑</param>
  /// <param name="attrNameValue">屬性值</param>
  /// <param name="selfInclude">是否連同標籤一起刪除.true表示刪除.</param>
  public int DelNodes(string xPath, string attrValue, bool selfInclude)
  {
   return DelNodes(xPath, "ID", attrValue, selfInclude);
  }

  /// <summary>
  /// 指定屬性的多個節點刪除
  /// </summary>
  /// <param name="xPath">刪除節點的路徑</param>
  /// <param name="attrName">屬性名</param>
  /// <param name="attrValue">屬性</param>
  /// <param name="selfInclude">是否連同標籤一起刪除.true表示刪除.</param>
  public int DelNodes(string xPath, string attrName, string attrValue, bool selfInclude)
  {
   //格式化節點路徑最終xPath = "xPath[@attrName='attrValue']"
   xPath = FormatXPath(xPath, attrName, attrValue);
   return DelNodes(xPath, selfInclude);
  }

  #endregion

  #region DelAttribute

  /// <summary>
  /// 刪除指定屬性
  /// </summary>
  /// <param name="xPath">屬性所在節點</param>
  /// <param name="attrName">待刪除屬性名</param>
  public int DelAttribute(string xPath, string attrName)
  {
   try
   {
    //取得目標節點,請將其轉換爲XmlElement類型
    XmlElement TargetElement = XmlDoc.DocumentElement.SelectSingleNode(xPath) as XmlElement;
    if(TargetElement != null)//元素存在
    {
     //刪除屬性
     TargetElement.RemoveAttribute(attrName);
     //保存修改
     XmlDoc.Save(xmlFileName);
     return 0;//正常返回
    }
    else
    {
     return 1;//沒有指定的屬性
    }
   }
   catch(XPathException ex)
   {
    return 2;//節點路徑錯誤
   }
   catch(ArgumentException ex)
   {
    return 3;//XML文件無法寫入
   }
   catch(XmlException ex)
   {
    return 4;////XML文件保存失敗
   }
   catch(Exception ex)
   {
    return 99;//不明錯誤
   }
  }

  #endregion

  #region DelAllAttributes

  /// <summary>
  /// 刪除節點下的全部屬性
  /// </summary>
  /// <param name="xPath">指定的節點</param>
  public int DelAllAttributes(string xPath)
  {
   try
   {
    //取得目標節點,請將其轉換爲XmlElement類型
    XmlElement TargetElement = XmlDoc.DocumentElement.SelectSingleNode(xPath) as XmlElement;
    if(TargetElement != null)//元素存在
    {
     //刪除全部屬性
     TargetElement.RemoveAllAttributes();
     //保存修改
     XmlDoc.Save(xmlFileName);
     return 0;//正常返回
    }
    else
    {
     return 1;//節點下沒有屬性
    }
   }
   catch(XPathException ex)
   {
    return 2;//節點路徑錯誤
   }
   catch(ArgumentException ex)
   {
    return 3;//XML文件無法寫入
   }
   catch(XmlException ex)
   {
    return 4;////XML文件保存失敗
   }
   catch(Exception ex)
   {
    return 99;//不明錯誤
   }
  }

  #endregion

  #region GetNodeValue

  /// <summary>
  /// 返回特定節點的內容
  /// </summary>  
  /// <param name="xPath">指定的節點</param>
  public string GetNodeValue(string xPath)
  {
   try
   {
    return XmlDoc.DocumentElement.SelectSingleNode(xPath).InnerText;
   }
   catch
   {
    return "";
   }
  }

  /// <summary>
  /// 返回包含ID屬性是指定值的節點內容
  /// </summary>
  /// <param name="xPath">指定的節點</param>
  /// <param name="attrValue">屬性值</param>
  public string GetNodeValue(string xPath, string attrValue)
  {
   return GetNodeValue(xPath, "ID", attrValue);
  }

  /// <summary>
  /// 返回包含指定屬性名及指定屬性值的節點內容
  /// </summary>
  /// <param name="xPath">指定的節點</param>
  /// <param name="attrName">屬性名</param>
  /// <param name="attrValue">屬性值</param>
  public string GetNodeValue(string xPath, string attrName, string attrValue)
  {
   //格式化節點路徑 xPath = "xPath[@attrName='attrValue']"
   xPath = FormatXPath(xPath, attrName, attrValue);
   return GetNodeValue(xPath);   
  }

  #endregion
  
  #region GetNodesCount

  /// <summary>
  /// 指定位置下的節點的個數
  /// </summary>
  /// <param name="xPath">節點名.</param>
  public int GetNodesCount(string xPath)
  {
   try
   {
    return XmlDoc.DocumentElement.SelectNodes(xPath).Count;
   }
   catch
   {
    return -1;
   }
  }
  
  /// <summary>
  /// 指定位置下ID屬性爲指定值的節點的個數
  /// </summary>
  /// <param name="xPath">節點名.</param>
  /// <param name="attrValue">屬性值</param>
  public int GetNodesCount(string xPath, string attrValue)
  {
   return GetNodesCount(xPath, "ID", attrValue);
  }

  /// <summary>
  /// 指定位置下ID屬性爲指定值的節點的個數
  /// </summary>
  /// <param name="xPath">節點名.</param>
  /// <param name="attrName">屬性名</param>
  /// <param name="attrValue">屬性值</param>
  /// <returns></returns>
  public int GetNodesCount(string xPath, string attrName, string attrValue)
  {
   //格式化節點路徑 xPath = "xPath[@attrName='attrValue']"
   xPath = FormatXPath(xPath, attrName, attrValue);
   return GetNodesCount(xPath);
  }

  #endregion

  #region GetChildNodesCount

  /// <summary>
  /// 指定節點下的子節點數
  /// </summary>
  /// <param name="xPath">指定的節點</param>
  public int GetChildNodesCount(string xPath)
  {
   try
   {
    return XmlDoc.DocumentElement.SelectSingleNode(xPath).ChildNodes.Count;
   }
   catch
   {
    return -1;
   }
  }

  /// <summary>
  /// 指定節點下ID屬性爲指定值的子節點數
  /// </summary>
  /// <param name="xPath">指定的節點</param>
  /// <param name="attrValue">屬性值</param>
  public int GetChildNodesCount(string xPath, string attrValue)
  {
   return GetChildNodesCount(xPath, "ID", attrValue);
  }

  /// <summary>
  /// 指定節點下指定屬性爲指定值的子節點數
  /// </summary>
  /// <param name="xPath">指定的節點</param>
  /// <param name="attrName">屬性名</param>
  /// <param name="attrValue">屬性值</param>
  public int GetChildNodesCount(string xPath, string attrName, string attrValue)
  {
   //格式化節點路徑 xPath = "xPath[@attrName='attrValue']"
   xPath = FormatXPath(xPath, attrName, attrValue);
   return GetChildNodesCount(xPath);
  }

  #endregion

  #region SaveXmlFile

  /// <summary>
  /// 保存xml文件到指定位置
  /// </summary>
  /// <param name="filePath">文件新路徑</param>
  public int SaveXmlFile(string filePath)
  {
   try
   {
    XmlDoc.Save(filePath);
    xmlFileName = filePath;
    return 0;
   }
   catch(XmlException ex)
   {
    return 4;//XML文件保存失敗
   }
  }  

  #endregion

  #region GetDBSection

  /// <summary>
  /// 関數:データベース接続XML定義ファイルを読取する処理モジュール。
  /// </summary>
  /// <param name="sectionName">節點名</param>
  /// <param name="attrValue">節點ID値</param>
  /// <returns>文字列配列:1Server; 2Database; 3User; 4Password; 5Connecttimeout; 6Commandtimeout</returns>
  public string[] GetDBSection(string sectionName, string attrValue)
  {
   return GetDBSection(sectionName, "ID", attrValue);
  }
  
  public string[] GetDBSection(string sectionName, string attrName, string attrValue)
  {
   string[] DBSection = {"", "", "", "", "", ""};
   string NodePath = FormatXPath(sectionName, attrName, attrValue);
   try
   {
    XmlNodeList TargetNodes = XmlDoc.DocumentElement.SelectSingleNode(NodePath).ChildNodes;
    if(TargetNodes.Count > 5)
    {
     foreach(XmlNode childNode in TargetNodes)
     {
      if(childNode.Name == "Server")
      {
       DBSection[0] = childNode.InnerText.Trim();
      }
      else if(childNode.Name == "Database")
      {
       DBSection[1] = childNode.InnerText.Trim();
      }
      else if(childNode.Name == "User")
      {
       DBSection[2] = childNode.InnerText.Trim();
      }
      else if(childNode.Name == "Password")
      {
       DBSection[3] = childNode.InnerText.Trim();
      }
      else if(childNode.Name == "Connecttimeout")
      {
       DBSection[4] = childNode.InnerText.Trim();
      }
      else if(childNode.Name == "Commandtimeout")
      {
       DBSection[5] = childNode.InnerText.Trim();
      }
     }
    }
    return DBSection;
   }
   catch
   {
    return DBSection;
   }
  }

  #endregion

  #region ShowMessage

  /// <summary>
  /// 関數:メッセージXML定義ファイルを読取する処理モジュール
  /// </summary>
  /// <param name="sectionName">節點名</param>
  /// <param name="attrValue">節點ID値</param>
  /// <returns>メッセージボックスの本文、ボタン種類、アイコン、デフォルトボタン、タイトル</returns>  
  public DialogResult ShowMessage(string sectionName, string attrValue)
  {
   return ShowMessage(sectionName, "ID", attrValue);
  }
  
  public DialogResult ShowMessage(string sectionName, string attrName, string attrValue)
  {   
   string MsgTest = "";
   string MsgCaption = "";
   MessageBoxButtons MsgButton = MessageBoxButtons.OK;
   MessageBoxIcon MsgIcon = MessageBoxIcon.None;
   MessageBoxDefaultButton MsgDefault = MessageBoxDefaultButton.Button1;
   MessageBoxOptions MsgOption = MessageBoxOptions.DefaultDesktopOnly;
   string NodePath = FormatXPath(sectionName, attrName, attrValue);
   try
   {    
    XmlNodeList TargetNodes = XmlDoc.DocumentElement.SelectSingleNode(NodePath).ChildNodes;
    if(TargetNodes.Count > 4)
    {
     foreach(XmlNode childNode in TargetNodes)
     {
      if(childNode.Name == "Information")
      {
       MsgTest = childNode.InnerText;
      }
      else if(childNode.Name == "Caption")
      {
       MsgCaption = childNode.InnerText;
      }
      else if(childNode.Name == "BtnInfo")
      {
       MsgButton = GetMessageBoxButton(childNode.InnerText.Trim());
      }
      else if(childNode.Name == "IconInfo")
      {
       MsgIcon = GetMessageBoxIcon(childNode.InnerText.Trim());
      }
      else if(childNode.Name == "DefaultButton")
      {
       MsgDefault = GetMessageBoxDefaultButton(childNode.InnerText.Trim());
      }
      else if(childNode.Name == "Option")
      {
       MsgOption = GetMessageBoxOption(childNode.InnerText.Trim());
      }
     }
    }   
    return MessageBox.Show(MsgTest, MsgCaption, MsgButton, MsgIcon, MsgDefault, MsgOption);
   }
   catch
   {
    return MessageBox.Show(MsgTest, MsgCaption, MsgButton, MsgIcon, MsgDefault, MsgOption);
   }
  }

  #endregion

  #endregion

  #region public staticメソッド

  #region GreateXmlFile

  /// <summary>
  /// staticメソッド:XMLファイルの新規作成
  /// </summary>
  /// <param name="fileFullPath">XMLファイル保存パス</param>
  /// <param name="rootName">Root節點名</param>
  public static int CreateXmlFile(string fileFullPath, string encoding, string rootName)
  {
   try
   {
    XmlDocument Doc = new XmlDocument();
    XmlDeclaration Dec = Doc.CreateXmlDeclaration("1.0", encoding, null);
    Doc.AppendChild(Dec);
    XmlElement RootNode = Doc.CreateElement(rootName);
    Doc.AppendChild(RootNode);
    Doc.Save(fileFullPath);
    return 0;//正常返回
   }
   catch(XPathException ex)
   {    
    return 2;//節點路徑錯誤
   }
   catch(InvalidOperationException ex)
   {
    return 5;//插入節點與父節點衝突
   }
   catch(ArgumentException ex)
   {
    return 3;//XML文件無法寫入
   }
   catch(XmlException ex)
   {
    return 4;//XML文件保存失敗
   }
   catch(Exception ex)
   {
    return 99;//不明錯誤
   }
  }

  public static int CreateXmlFile(string fileFullPath, string rootName)
  {
   return CreateXmlFile(fileFullPath, "UTF-8", rootName);
  }  

  public static int CreateXmlFile(string fileFullPath)
  {
   return CreateXmlFile(fileFullPath, "UTF-8", "Root");
  }

  #endregion

  #region GetDBSection

  /// <summary>
  /// staticメソッド:データベース接続XML定義ファイルを読取する処理モジュール
  /// </summary>
  /// <param name="XmlDoc">XMLファイル対象</param>
  /// <param name="sectionName">節點名</param>
  /// <param name="attrValue">節點ID値</param>
  /// <returns>文字列配列:1Server; 2Database; 3User; 4Password; 5Connecttimeout; 6Commandtimeout</returns>
  public static string[] GetDBSection(XmlDocument XmlDoc, string sectionName, string attrValue)
  {
   return GetDBSection(XmlDoc, sectionName, "ID", attrValue);
  }

  public static string[] GetDBSection(XmlDocument XmlDoc, string sectionName, string attrName, string attrValue)
  {
   string[] DBSection = {"", "", "", "", "", ""};
   string NodePath = FormatXPath(sectionName, attrName, attrValue);
   try
   {    
    XmlNodeList TargetNodes = XmlDoc.DocumentElement.SelectSingleNode(NodePath).ChildNodes;
    if(TargetNodes.Count > 5)
    {
     foreach(XmlNode childNode in TargetNodes)
     {
      if(childNode.Name == "Server")
      {
       DBSection[0] = childNode.InnerText.Trim();
      }
      else if(childNode.Name == "Database")
      {
       DBSection[1] = childNode.InnerText.Trim();
      }
      else if(childNode.Name == "User")
      {
       DBSection[2] = childNode.InnerText.Trim();
      }
      else if(childNode.Name == "Password")
      {
       DBSection[3] = childNode.InnerText.Trim();
      }
      else if(childNode.Name == "Connecttimeout")
      {
       DBSection[4] = childNode.InnerText.Trim();
      }
      else if(childNode.Name == "Commandtimeout")
      {
       DBSection[5] = childNode.InnerText.Trim();
      }
     }
    }   
    return DBSection;
   }
   catch
   {
    return DBSection;
   }
  }

  #endregion

  #region ShowMessage

  /// <summary>
  /// staticメソッド:メッセージXML定義ファイルを読取する処理モジュール
  /// </summary>
  /// <param name="sectionName">節點名</param>
  /// <param name="attrValue">節點ID値</param>
  /// <returns>メッセージボックスの本文、ボタン種類、アイコン、デフォルトボタン、タイトル</returns>
  
  public static DialogResult ShowMessage(XmlDocument XmlDoc, string sectionName, string attrValue)
  {
   return ShowMessage(XmlDoc, sectionName, "ID", attrValue);
  }

  public static DialogResult ShowMessage(XmlDocument XmlDoc, string sectionName, string attrName, string attrValue)
  {   
   string MsgTest = "";
   string MsgCaption = "";
   MessageBoxButtons MsgButton = MessageBoxButtons.OK;
   MessageBoxIcon MsgIcon = MessageBoxIcon.None;
   MessageBoxDefaultButton MsgDefault = MessageBoxDefaultButton.Button1;
   MessageBoxOptions MsgOption = MessageBoxOptions.DefaultDesktopOnly;
   string NodePath = FormatXPath(sectionName, attrName, attrValue);
   try
   {    
    XmlNodeList TargetNodes = XmlDoc.DocumentElement.SelectSingleNode(NodePath).ChildNodes;
    if(TargetNodes.Count > 4)
    {
     foreach(XmlNode childNode in TargetNodes)
     {
      if(childNode.Name == "Information")
      {
       MsgTest = childNode.InnerText;
      }
      else if(childNode.Name == "Caption")
      {
       MsgCaption = childNode.InnerText;
      }
      else if(childNode.Name == "BtnInfo")
      {
       MsgButton = GetMessageBoxButton(childNode.InnerText.Trim());
      }
      else if(childNode.Name == "IconInfo")
      {
       MsgIcon = GetMessageBoxIcon(childNode.InnerText.Trim());
      }
      else if(childNode.Name == "DefaultButton")
      {
       MsgDefault = GetMessageBoxDefaultButton(childNode.InnerText.Trim());
      }
      else if(childNode.Name == "Option")
      {
       MsgOption = GetMessageBoxOption(childNode.InnerText.Trim());
      }
     }
    }
    return MessageBox.Show(MsgTest, MsgCaption, MsgButton, MsgIcon, MsgDefault, MsgOption);
   }
   catch
   {
    return MessageBox.Show(MsgTest, MsgCaption, MsgButton, MsgIcon, MsgDefault, MsgOption);
   }
  }

  #endregion

  #endregion

  #region  Private staticメソッド

  /// <summary>
  /// 格式化節點路徑
  /// </summary>
  /// <param name="xPath"></param>
  /// <returns></returns>  
  private static string FormatXPath(string xPath, string attrValue)
  {
   return FormatXPath(xPath, "ID", attrValue);
  }

  private static string FormatXPath(string xPath, string attrName, string attrValue)
  {
   return xPath + "[@" + attrName.Trim() + "='" + attrValue.Trim() + "']";
  }
  /// <summary>
  /// Private staticメソッド
  /// </summary>
  /// <param name="ButtonName"></param>
  /// <returns></returns>
  private static MessageBoxButtons GetMessageBoxButton(string ButtonName)
  {
   string strName=ButtonName.Trim();
   strName=strName.ToLower();
   MessageBoxButtons Buttons;
   Buttons=MessageBoxButtons.OK;
   
   switch(strName.ToLower())
   {
    case "abortretryignore":
    {
     Buttons=MessageBoxButtons.AbortRetryIgnore;
     break;
    }//case AbortRetryIgnore
    case "okcancel":
    {
     Buttons=MessageBoxButtons.OKCancel;
     break;
    }//case OKCancel
    case "retrycancel":
    {
     Buttons=MessageBoxButtons.RetryCancel;
     break;
    }//case RetryCancel
    case "yesno":
    {
     Buttons=MessageBoxButtons.YesNo;
     break;
    }//case YesNo
    case "yesnocancel":
    {
     Buttons=MessageBoxButtons.YesNoCancel;
     break;
    }//case YesNoCancel
    default:
    {
     Buttons=MessageBoxButtons.OK;
     break;
    }//case OK
   }//switch Button
   
   return Buttons;
  }
  /// <summary>
  /// Private staticメソッド
  /// </summary>
  /// <param name="ButtonName"></param>
  /// <returns></returns>
  private static MessageBoxDefaultButton GetMessageBoxDefaultButton(string DefaultButtonName)
  {
   string strName=DefaultButtonName.Trim();
   strName=strName.ToLower();
   MessageBoxDefaultButton DefaultButton;
   DefaultButton=MessageBoxDefaultButton.Button1;
   
   switch(strName.ToLower())
   {
    case "button3":
    {
     DefaultButton=MessageBoxDefaultButton.Button3;
     break;
    }//case Button3
    case "button2":
    {
     DefaultButton=MessageBoxDefaultButton.Button2;
     break;
    }//case Button2
    default:
    {
     DefaultButton=MessageBoxDefaultButton.Button1;
     break;
    }//case default Button1
   }//switch DefaultButton
   
   return DefaultButton;
  }
  /// <summary>
  /// Private staticメソッド
  /// </summary>
  /// <param name="ButtonName"></param>
  /// <returns></returns>
  private static MessageBoxIcon GetMessageBoxIcon(string IconName)
  {
   string strName=IconName.Trim();
   strName=strName.ToLower();
   MessageBoxIcon Icon;
   Icon=MessageBoxIcon.None;
   
   switch(strName.ToLower())
   {
    case "asterisk":
     Icon=MessageBoxIcon.Asterisk;
     break;
    case "error":
     Icon=MessageBoxIcon.Error;
     break;
    case "exclamation":
     Icon=MessageBoxIcon.Exclamation;
     break;
    case "hand":
     Icon=MessageBoxIcon.Hand;
     break;
    case "information":
     Icon=MessageBoxIcon.Information;
     break;
    case "question":
     Icon=MessageBoxIcon.Question;
     break;
    case "stop":
     Icon=MessageBoxIcon.Stop;
     break;
    case "warning":
     Icon=MessageBoxIcon.Warning;
     break;
    default:
     Icon=MessageBoxIcon.None;
     break;
   }//switch Icon
   
   return Icon;
  }
  /// <summary>
  /// Private staticメソッド
  /// </summary>
  /// <param name="ButtonName"></param>
  /// <returns></returns>
  private static MessageBoxOptions GetMessageBoxOption(string OptionName)
  {
   string strName=OptionName.Trim();
   strName=strName.ToLower();
   MessageBoxOptions Option;
   Option=MessageBoxOptions.DefaultDesktopOnly;
   
   switch(strName.ToLower())
   {
    case "rightalign":
    {
     Option=MessageBoxOptions.RightAlign;
     break;
    }//case RightAlign
    case "rtlreading":
    {
     Option=MessageBoxOptions.RtlReading;
     break;
    }//case RtlReading
    case "servicenotification":
    {
     Option=MessageBoxOptions.ServiceNotification;
     break;
    }//case ServiceNotification
    default:
    {
     Option=MessageBoxOptions.DefaultDesktopOnly;
     break;
    }//case default DefaultDesktopOnly
          
   }//switch Option
   
   return Option;
  }

  #endregion

 }
}

發佈了12 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章