zoukankan      html  css  js  c++  java
  • c# xml操作(二)

      1 c# xml操作(二)  此博文包含图片    (2011-05-05 14:58:36)转载▼
      2 标签: 杂谈    分类: c#
      3 上次,我们介绍了增加和删除xml的一些操作,这次我们将介绍如何更改和读取xml特定节点。我们依然以上次的xml文件为例:
      4 <?xml version="1.0" encoding="utf-8"?>
      5 <phonebook>
      6   <member id="6">
      7     <name>456</name>
      8     <qq>5465</qq>
      9   </member>
     10   <member id="5">
     11     <name>jjjjj</name>
     12     <qq>3456789</qq>
     13   </member>
     14 </phonebook>
     15  
     16 首先是更改操作,它也包含两个方面即更改指定节点的值和指定节点的某一属性值,我们可以使用的方法如下:
     17   /// <summary>
     18         /// 更新Xml节点内容
     19         /// </summary>
     20         /// <param name="xmlPath">xml路径</param>
     21         /// <param name="Node">要更换内容的节点:节点路径 根节点/父节点/当前节点</param>
     22         /// <param name="Content">新的内容</param>
     23         public static void XmlNodeReplace(string xmlPath, string Node, string Content)
     24         {
     25             XmlDocument objXmlDoc = new XmlDocument();
     26             objXmlDoc.Load(xmlPath);
     27             objXmlDoc.SelectSingleNode(Node).InnerText = Content;
     28             objXmlDoc.Save(xmlPath);
     29 
     30         }
     31 
     32  /// <summary>
     33         /// 更改节点的属性值
     34         /// </summary>
     35         /// <param name="xmlPath">文件路径</param>
     36         /// <param name="NodePath">节点路径</param>
     37         /// <param name="NodeAttribute1">要更改的节点属性的名称</param>
     38         /// <param name="NodeAttributeText">更改的属性值</param>
     39         public static void XmlAttributeEide(string xmlPath, string NodePath, string NodeAttribute1, string NodeAttributeText)
     40         {
     41             XmlDocument objXmlDoc = new XmlDocument();
     42             objXmlDoc.Load(xmlPath);
     43             XmlNode nodePath = objXmlDoc.SelectSingleNode(NodePath);
     44             XmlElement xe = (XmlElement)nodePath;
     45             xe.SetAttribute(NodeAttribute1, NodeAttributeText);
     46             objXmlDoc.Save(xmlPath);
     47 
     48         }
     49 
     50 第一个方面,加入我们要更改menber(id=6)下节点name的值我们可以这样做:
     51     string xmlPath = Server.MapPath("~/test.xml");
     52 
     53         XmlHelper.XmlNodeReplace(xmlPath, "//member[@id=6]/name" ,"hya");
     54 也可以
     55     string xmlPath = Server.MapPath("~/test.xml");
     56 
     57         XmlHelper.XmlNodeReplace(xmlPath, "//member[qq='5465']/name" ,"hya");
     58 总之你能够用xpath语法找到所要更改的节点即可。
     59 更改属性值也一样,在这不在赘述!
     60 查询正如对数据库操作查询考查你对sql的熟练程度一样,对xml的查询也就是考查你对xpath了解多少。在这里我只是列出几个有限的调用方法,相信从上面的介绍中你可以大致对xpath有了一定的了解:
     61 
     62         #region 读取XML到DataSet
     63         /// <summary>
     64         /// 功能:读取XML到DataSet中
     65         /// </summary>
     66         /// <param name="XmlPath">xml路径</param>
     67         /// <returns>DataSet</returns>
     68         public static DataSet GetXml(string XmlPath)
     69         {
     70             DataSet ds = new DataSet();
     71             ds.ReadXml(@XmlPath);
     72             return ds;
     73         }
     74         #endregion
     75 
     76         #region 读取xml文档并返回一个节点
     77         /// <summary>
     78         /// 读取xml文档并返回一个节点:适用于一级节点
     79         /// </summary>
     80         /// <param name="XmlPath">xml路径</param>
     81         /// <param name="NodeName">节点</param>
     82         /// <returns></returns>
     83         public static string ReadXmlReturnNode(string XmlPath, string Node)
     84         {
     85             XmlDocument docXml = new XmlDocument();
     86             docXml.Load(@XmlPath);
     87             XmlNodeList xn = docXml.getElementsByTagName_r(Node);
     88             return xn.Item(0).InnerText.ToString();
     89         }
     90         #endregion
     91 
     92         #region 查找数据,返回一个DataSet
     93         /// <summary>
     94         /// 查找数据,返回当前节点的所有下级节点,填充到一个DataSet中
     95         /// </summary>
     96         /// <param name="xmlPath">xml文档路径</param>
     97         /// <param name="XmlPathNode">节点的路径:根节点/父节点/当前节点</param>
     98         /// <returns></returns>
     99         public static DataSet GetXmlData(string xmlPath, string XmlPathNode)
    100         {
    101             XmlDocument objXmlDoc = new XmlDocument();
    102             objXmlDoc.Load(xmlPath);
    103             DataSet ds = new DataSet();
    104             StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
    105             ds.ReadXml(read);
    106             return ds;
    107         }
    108   #region 读取指定节点的指定属性值
    109         /// <summary>
    110         /// 功能:
    111         /// 读取指定节点的指定属性值
    112         /// </summary>
    113         /// <param name="strNode">节点路径</param>
    114         /// <param name="strAttribute">此节点的属性</param>
    115         /// <returns></returns>
    116         public string GetXmlNodeAttribute(string xmlPath, string strNode, string strAttribute)
    117         {
    118             string strReturn = "";
    119             xmlDoc.Load(xmlPath);
    120             try
    121             {
    122                 //根据指定路径获取节点
    123                 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
    124                 //获取节点的属性,并循环取出需要的属性值
    125                 XmlAttributeCollection xmlAttr = xmlNode.Attributes;
    126 
    127                 for (int i = 0; i < xmlAttr.Count; i++)
    128                 {
    129                     if (xmlAttr.Item(i).Name == strAttribute)
    130                         strReturn = xmlAttr.Item(i).Value;
    131                 }
    132             }
    133             catch (XmlException xmle)
    134             {
    135                 throw xmle;
    136             }
    137             return strReturn;
    138         }
    139         #endregion
    140 
    141         #region 读取指定节点的值
    142         /// <summary>
    143         /// 功能:
    144         /// 读取指定节点的值
    145         /// </summary>
    146         /// <param name="strNode">节点名称(xpath)</param>
    147         /// <returns></returns>
    148         public string GetXmlNodeValue(string xmlPath,string strNode)
    149         {
    150             string strReturn = String.Empty;
    151             xmlDoc.Load(xmlPath);
    152             try
    153             {
    154                 //根据路径获取节点
    155                 XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode);
    156                 strReturn = xmlNode.InnerText;
    157             }
    158             catch (XmlException xmle)
    159             {
    160                 System.Console.WriteLine(xmle.Message);
    161             }
    162             return strReturn;
    163         }
    164         #endregion
    165 
    166 
    167 
    168         #region 根据节点属性读取子节点值(较省资源模式)
    169         /// <summary>
    170         /// 根据节点属性读取子节点值(较省资源模式)
    171         /// </summary>
    172         /// <param name="XmlPath">xml路径</param>
    173         /// <param name="FatherElement">父节点值</param>
    174         /// <param name="AttributeName">属性名称</param>
    175         /// <param name="AttributeValue">属性值</param>
    176         /// <param name="ArrayLength">返回的数组长度</param>
    177         /// <returns></returns>
    178         public static System.Collections.ArrayList GetSubElementByAttribute(string XmlPath, string FatherElement, string AttributeName, string AttributeValue, int ArrayLength)
    179         {
    180             System.Collections.ArrayList al = new System.Collections.ArrayList();
    181             XmlDocument docXml = new XmlDocument();
    182             docXml.Load(@XmlPath);
    183             XmlNodeList xn;
    184             xn = docXml.DocumentElement.SelectNodes("//" + FatherElement + "[" + @AttributeName + "='" + AttributeValue + "']");
    185             XmlNodeList xx = xn.Item(0).ChildNodes;
    186             for (int i = 0; i < ArrayLength & i < xx.Count; i++)
    187             {
    188 
    189                 al.Add(xx.Item(i).InnerText);
    190             }
    191             return al;
    192 
    193         }
    194         #endregion
    目前还在学习中,希望会对大家有所帮助,觉得不错,就点赞支持一下。 另外,转载时请附带链接。谢谢!
  • 相关阅读:
    centos 用户管理
    rsync 实验
    文件共享和传输
    PAT 1109 Group Photo
    PAT 1108 Finding Average
    PAT 1107 Social Clusters
    PAT 1106 Lowest Price in Supply Chain
    PAT 1105 Spiral Matrix
    PAT 1104 Sum of Number Segments
    PAT 1103 Integer Factorization
  • 原文地址:https://www.cnblogs.com/dangkai/p/7874243.html
Copyright © 2011-2022 走看看