• 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
    目前还在学习中,希望会对大家有所帮助,觉得不错,就点赞支持一下。 另外,转载时请附带链接。谢谢!
  • 相关阅读:
    .NET CF 枚举设备窗口
    .NET CF WM设备(手机)振动
    如何将 byte[] 转换为 IntPtr?
    Mobile 重启设备
    如何删除只读文件?
    随笔
    故乡的原风景
    岁月神偷
    opengl纹理映射
    bootstrap 学习笔记
  • 原文地址:https://www.cnblogs.com/dangkai/p/7874243.html
Copyright © 2020-2023  润新知