zoukankan      html  css  js  c++  java
  • XML文档操作工具类

      1 /// <summary>
      2 /// XML文档操作工具类
      3 /// </summary>
      4 public class XmlUtil
      5 {
      6     #region XML文档节点查询和读取
      7 
      8     /// <summary>
      9     /// 选择匹配XPath表达式的第一个节点XmlNode.
     10     /// </summary>
     11     /// <param name="xmlDoc">XML文档</param>
     12     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
     13     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名")</param>
     14     /// <returns>返回XmlNode</returns>
     15     public static XmlNode GetXmlNodeByXpath(XmlDocument xmlDoc, string xpath)
     16     {
     17         try
     18         {
     19             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
     20             return xmlNode;
     21         }
     22         catch (Exception ex)
     23         {
     24             throw ex; //这里可以定义你自己的异常处理
     25         }
     26     }
     27 
     28     /// <summary>
     29     /// 选择匹配XPath表达式的节点列表XmlNodeList.
     30     /// </summary>
     31     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
     32     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名")</param>
     33     /// <returns>返回XmlNodeList</returns>
     34     public static XmlNodeList GetXmlNodeListByXpath(XmlDocument xmlDoc, string xpath)
     35     {
     36         try
     37         {
     38             XmlNodeList xmlNodeList = xmlDoc.SelectNodes(xpath);
     39             return xmlNodeList;
     40         }
     41         catch (Exception ex)
     42         {
     43             throw ex; //这里可以定义你自己的异常处理
     44         }
     45     }
     46 
     47     /// <summary>
     48     /// 选择匹配XPath表达式的第一个节点的匹配xmlAttributeName的属性XmlAttribute.
     49     /// </summary>
     50     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
     51     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
     52     /// <param name="xmlAttributeName">要匹配xmlAttributeName的属性名称,默认为value</param>
     53     /// <returns>返回xmlAttributeName</returns>
     54     public static XmlAttribute GetXmlAttribute(XmlDocument xmlDoc, string xpath, params string[] xmlAttributeName)
     55     {
     56         string content = string.Empty;
     57         XmlAttribute xmlAttribute = null;
     58         try
     59         {
     60             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
     61             if (xmlNode != null)
     62             {
     63                 if (xmlNode.Attributes.Count > 0)
     64                 {
     65                     if (int.Equals(xmlAttributeName.Length, 0))
     66                         xmlAttribute = xmlNode.Attributes["value"];
     67                     else
     68                         xmlAttribute = xmlNode.Attributes[xmlAttributeName[0]];
     69                 }
     70             }
     71         }
     72         catch (Exception ex)
     73         {
     74             throw ex; //这里可以定义你自己的异常处理
     75         }
     76         return xmlAttribute;
     77     }
     78 
     79     #endregion
     80 
     81     #region XML文档创建和节点或属性的添加、修改
     82 
     83     /// <summary>
     84     /// 创建一个XML文档
     85     /// </summary>
     86     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
     87     /// <param name="rootNodeName">XML文档根节点名称(须指定一个根节点名称)</param>
     88     /// <param name="version">XML文档信息量(必须为:"1.0")</param>
     89     /// <param name="encoding">XML文档编码方式</param>
     90     /// <param name="standalone">该值必须是"yes"或"no",如果为null,Save方法不在XML声明上写出独立属性</param>
     91     /// <returns>成功返回true,失败返回false</returns>
     92     public static bool CreateXmlDocument(string xmlFileName, string rootNodeName, string version, string encoding, string standalone)
     93     {
     94         bool isSuccess = false;
     95         try
     96         {
     97             XmlDocument xmlDoc = new XmlDocument();
     98             XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration(version, encoding, standalone);
     99             XmlNode root = xmlDoc.CreateElement(rootNodeName);
    100             xmlDoc.AppendChild(xmlDeclaration);
    101             xmlDoc.AppendChild(root);
    102             xmlDoc.Save(xmlFileName);
    103             isSuccess = true;
    104         }
    105         catch (Exception ex)
    106         {
    107             throw ex; //这里可以定义你自己的异常处理
    108         }
    109         return isSuccess;
    110     }
    111 
    112     /// <summary>
    113     /// 依据匹配XPath表达式的第一个节点来创建它的子节点(如果此节点已存在则追加一个新的同名节点
    114     /// </summary>
    115     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
    116     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
    117     /// <param name="xmlNodeName">要匹配xmlNodeName的节点名称</param>
    118     /// <param name="innerText">节点文本值</param>
    119     /// <param name="xmlAttributeName">要匹配xmlAttributeName的属性名称集合</param>
    120     /// <param name="value">属性值集合</param>
    121     /// <returns>成功返回true,失败返回false</returns>
    122     public static bool CreateXmlNodeByXPath(string xmlFileName, string xpath, string xmlNodeName, string innerText, string[] xmlAttributeName, string[] value)
    123     {
    124         bool isSuccess = false;
    125         XmlDocument xmlDoc = new XmlDocument();
    126         try
    127         {
    128             xmlDoc.Load(xmlFileName); //加载XML文档
    129             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
    130             if (xmlNode != null)
    131             {
    132                 //存不存在此节点都创建
    133                 XmlElement subElement = xmlDoc.CreateElement(xmlNodeName);
    134                 subElement.InnerXml = innerText;
    135 
    136                 //如果属性和值参数都不为空则在此新节点上新增属性
    137                 if (xmlAttributeName != null && value != null)
    138                 {
    139                     for (int i = 0; i < xmlAttributeName.Length; i++)
    140                     {
    141                         XmlAttribute xmlAttribute = xmlDoc.CreateAttribute(xmlAttributeName[i]);
    142                         xmlAttribute.Value = value[i];
    143                         subElement.Attributes.Append(xmlAttribute);
    144                     }
    145                 }
    146                 xmlNode.AppendChild(subElement);
    147             }
    148             xmlDoc.Save(xmlFileName); //保存到XML文档
    149             isSuccess = true;
    150         }
    151         catch (Exception ex)
    152         {
    153             throw ex; //这里可以定义你自己的异常处理
    154         }
    155         return isSuccess;
    156     }
    157 
    158     /// <summary>
    159     /// 依据匹配XPath表达式的第一个节点来创建或更新它的子节点(如果节点存在则更新,不存在则创建)
    160     /// </summary>
    161     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
    162     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
    163     /// <param name="xmlNodeName">要匹配xmlNodeName的节点名称</param>
    164     /// <param name="innerText">节点文本值</param>
    165     /// <returns>成功返回true,失败返回false</returns>
    166     public static bool CreateOrUpdateXmlNodeByXPath(string xmlFileName, string xpath, string xmlNodeName, string innerText)
    167     {
    168         bool isSuccess = false;
    169         bool isExistsNode = false;//标识节点是否存在
    170         XmlDocument xmlDoc = new XmlDocument();
    171         try
    172         {
    173             xmlDoc.Load(xmlFileName); //加载XML文档
    174             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
    175             if (xmlNode != null)
    176             {
    177                 //遍历xpath节点下的所有子节点
    178                 foreach (XmlNode node in xmlNode.ChildNodes)
    179                 {
    180                     if (node.Name.ToLower() == xmlNodeName.ToLower())
    181                     {
    182                         //存在此节点则更新
    183                         node.InnerXml = innerText;
    184                         isExistsNode = true;
    185                         break;
    186                     }
    187                 }
    188                 if (!isExistsNode)
    189                 {
    190                     //不存在此节点则创建
    191                     XmlElement subElement = xmlDoc.CreateElement(xmlNodeName);
    192                     subElement.InnerXml = innerText;
    193                     xmlNode.AppendChild(subElement);
    194                 }
    195             }
    196             xmlDoc.Save(xmlFileName); //保存到XML文档
    197             isSuccess = true;
    198         }
    199         catch (Exception ex)
    200         {
    201             throw ex; //这里可以定义你自己的异常处理
    202         }
    203         return isSuccess;
    204     }
    205 
    206     /// <summary>
    207     /// 依据匹配XPath表达式的第一个节点来创建或更新它的属性(如果属性存在则更新,不存在则创建)
    208     /// </summary>
    209     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
    210     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
    211     /// <param name="xmlAttributeName">要匹配xmlAttributeName的属性名称</param>
    212     /// <param name="value">属性值</param>
    213     /// <returns>成功返回true,失败返回false</returns>
    214     public static bool CreateOrUpdateXmlAttributeByXPath(string xmlFileName, string xpath, string value, params string[] xmlAttributeNamePara)
    215     {
    216         bool isSuccess = false;
    217         bool isExistsAttribute = false;//标识属性是否存在
    218         XmlDocument xmlDoc = new XmlDocument();
    219         try
    220         {
    221             xmlDoc.Load(xmlFileName); //加载XML文档
    222             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
    223             if (xmlNode != null)
    224             {
    225                 //默认为value
    226                 string xmlAttributeName = "value";
    227                 if (xmlAttributeNamePara.Length > 0)
    228                 {
    229                     xmlAttributeName = xmlAttributeNamePara[0];
    230                 }
    231                 //遍历xpath节点中的所有属性
    232                 foreach (XmlAttribute attribute in xmlNode.Attributes)
    233                 {
    234                     if (attribute.Name.ToLower() == xmlAttributeName.ToLower())
    235                     {
    236                         //节点中存在此属性则更新
    237                         attribute.Value = value;
    238                         isExistsAttribute = true;
    239                         break;
    240                     }
    241                 }
    242                 if (!isExistsAttribute)
    243                 {
    244                     //节点中不存在此属性则创建
    245                     XmlAttribute xmlAttribute = xmlDoc.CreateAttribute(xmlAttributeName);
    246                     xmlAttribute.Value = value;
    247                     xmlNode.Attributes.Append(xmlAttribute);
    248                 }
    249             }
    250             xmlDoc.Save(xmlFileName); //保存到XML文档
    251             isSuccess = true;
    252         }
    253         catch (Exception ex)
    254         {
    255             throw ex; //这里可以定义你自己的异常处理
    256         }
    257         return isSuccess;
    258     }
    259 
    260     #endregion
    261 
    262     #region XML文档节点或属性的删除
    263 
    264     /// <summary>
    265     /// 删除匹配XPath表达式的第一个节点(节点中的子元素同时会被删除)
    266     /// </summary>
    267     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
    268     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
    269     /// <returns>成功返回true,失败返回false</returns>
    270     public static bool DeleteXmlNodeByXPath(string xmlFileName, string xpath)
    271     {
    272         bool isSuccess = false;
    273         XmlDocument xmlDoc = new XmlDocument();
    274         try
    275         {
    276             xmlDoc.Load(xmlFileName); //加载XML文档
    277             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
    278             if (xmlNode != null)
    279             {
    280                 //删除节点
    281                 xmlNode.ParentNode.RemoveChild(xmlNode);
    282             }
    283             xmlDoc.Save(xmlFileName); //保存到XML文档
    284             isSuccess = true;
    285         }
    286         catch (Exception ex)
    287         {
    288             throw ex; //这里可以定义你自己的异常处理
    289         }
    290         return isSuccess;
    291     }
    292 
    293     /// <summary>
    294     /// 删除匹配XPath表达式的第一个节点中的匹配参数xmlAttributeName的属性
    295     /// </summary>
    296     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
    297     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
    298     /// <param name="xmlAttributeName">要删除的xmlAttributeName的属性名称</param>
    299     /// <returns>成功返回true,失败返回false</returns>
    300     public static bool DeleteXmlAttributeByXPath(string xmlFileName, string xpath, string xmlAttributeName)
    301     {
    302         bool isSuccess = false;
    303         bool isExistsAttribute = false;
    304         XmlDocument xmlDoc = new XmlDocument();
    305         try
    306         {
    307             xmlDoc.Load(xmlFileName); //加载XML文档
    308             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
    309             XmlAttribute xmlAttribute = null;
    310             if (xmlNode != null)
    311             {
    312                 //遍历xpath节点中的所有属性
    313                 foreach (XmlAttribute attribute in xmlNode.Attributes)
    314                 {
    315                     if (attribute.Name.ToLower() == xmlAttributeName.ToLower())
    316                     {
    317                         //节点中存在此属性
    318                         xmlAttribute = attribute;
    319                         isExistsAttribute = true;
    320                         break;
    321                     }
    322                 }
    323                 if (isExistsAttribute)
    324                 {
    325                     //删除节点中的属性
    326                     xmlNode.Attributes.Remove(xmlAttribute);
    327                 }
    328             }
    329             xmlDoc.Save(xmlFileName); //保存到XML文档
    330             isSuccess = true;
    331         }
    332         catch (Exception ex)
    333         {
    334             throw ex; //这里可以定义你自己的异常处理
    335         }
    336         return isSuccess;
    337     }
    338 
    339     /// <summary>
    340     /// 删除匹配XPath表达式的第一个节点中的所有属性
    341     /// </summary>
    342     /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>
    343     /// <param name="xpath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>
    344     /// <returns>成功返回true,失败返回false</returns>
    345     public static bool DeleteAllXmlAttributeByXPath(string xmlFileName, string xpath)
    346     {
    347         bool isSuccess = false;
    348         XmlDocument xmlDoc = new XmlDocument();
    349         try
    350         {
    351             xmlDoc.Load(xmlFileName); //加载XML文档
    352             XmlNode xmlNode = xmlDoc.SelectSingleNode(xpath);
    353             if (xmlNode != null)
    354             {
    355                 //遍历xpath节点中的所有属性
    356                 xmlNode.Attributes.RemoveAll();
    357             }
    358             xmlDoc.Save(xmlFileName); //保存到XML文档
    359             isSuccess = true;
    360         }
    361         catch (Exception ex)
    362         {
    363             throw ex; //这里可以定义你自己的异常处理
    364         }
    365         return isSuccess;
    366     }
    367 
    368     #endregion
    369 }
  • 相关阅读:
    将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式
    hive基本结构与数据存储
    使用sqoop从Oracle或mysql抽取数据到HDFS遇到的报错及解决
    Sqoop导入关系数据库到Hive
    SVN版本回退
    SVN--分支、合并
    关于SVN版本分支合并的知识
    在spring环境下集成ActiveMQ
    ActiveMQ
    Oracle中sequence的使用方法
  • 原文地址:https://www.cnblogs.com/Mo-MaTure/p/5398210.html
Copyright © 2011-2022 走看看