XML操作基类

来源:互联网 发布:淘宝时空电玩psv 编辑:程序博客网 时间:2024/06/09 23:00
  1.  /**************************************************************** 
  2. * 更新内容: 1,根据父节点属性读取字节点值 
  3. *     2,根据节点属性读取子节点值(较省资源模式) 
  4. *更新时间:2007-1-17 
  5. ****************************************************************/ 
  6.   
  7. /********************************************************************************** 
  8.  *  
  9.  * 功能说明:XML处理基类 
  10.  * 作者: 刘功勋; 
  11.  * 版本:V0.1(C#2.0);时间:2006-12-13 
  12.  *  
  13.  * *******************************************************************************/ 
  14. using System; 
  15. using System.Data; 
  16. using System.Configuration; 
  17. using System.Web; 
  18. using System.Web.Security; 
  19. using System.Web.UI; 
  20. using System.Web.UI.WebControls; 
  21. using System.Web.UI.WebControls.WebParts; 
  22. using System.Web.UI.HtmlControls; 
  23. using System.IO; 
  24. using System.Xml; 
  25. using System.Text; 
  26. using MSXML2; 
  27. namespace EC 
  28.     /// <summary> 
  29.     /// XML 操作基类 
  30.     /// </summary> 
  31.     public class XmlObject : IDisposable 
  32.     {       
  33.         
  34.            
  35.          
  36.         //以下为单一功能的静态类 
  37.          
  38.         #region 读取XML到DataSet 
  39.         /************************************************** 
  40.          * 函数名称:GetXml(string XmlPath) 
  41.          * 功能说明:读取XML到DataSet 
  42.          * 参    数:XmlPath:xml文档路径 
  43.          * 使用示列: 
  44.          *          using EC; //引用命名空间 
  45.          *          string xmlPath = Server.MapPath("/EBDnsConfig/DnsConfig.xml"); //获取xml路径 
  46.          *          DataSet ds = EC.XmlObject.GetXml(xmlPath); //读取xml到DataSet中 
  47.          ************************************************/ 
  48.         /// <summary> 
  49.         /// 功能:读取XML到DataSet中 
  50.         /// </summary> 
  51.         /// <param name="XmlPath">xml路径</param> 
  52.         /// <returns>DataSet</returns> 
  53.         public static DataSet GetXml(string XmlPath) 
  54.         { 
  55.             DataSet ds = new DataSet(); 
  56.             ds.ReadXml(@XmlPath); 
  57.             return ds; 
  58.         } 
  59.         #endregion 
  60.         #region 读取xml文档并返回一个节点 
  61.         /************************************************** 
  62.          * 函数名称:ReadXmlReturnNode(string XmlPath,string Node) 
  63.          * 功能说明:读取xml文档并返回一个节点:适用于一级节点 
  64.          * 参    数: XmlPath:xml文档路径;Node 返回的节点名称  
  65.          * 适应用Xml:<?xml version="1.0" encoding="utf-8" ?> 
  66.          *           <root> 
  67.          *               <dns1>ns1.everdns.com</dns1> 
  68.          *          </root> 
  69.          * 使用示列: 
  70.          *          using EC; //引用命名空间 
  71.          *          string xmlPath = Server.MapPath("/EBDnsConfig/DnsConfig.xml"); //获取xml路径 
  72.          *          Response.Write(XmlObject.ReadXmlReturnNode(xmlPath, "mailmanager")); 
  73.          ************************************************/ 
  74.         /// <summary> 
  75.         /// 读取xml文档并返回一个节点:适用于一级节点 
  76.         /// </summary> 
  77.         /// <param name="XmlPath">xml路径</param> 
  78.         /// <param name="NodeName">节点</param> 
  79.         /// <returns></returns> 
  80.         public static string ReadXmlReturnNode(string XmlPath,string Node) 
  81.         { 
  82.             XmlDocument docXml = new XmlDocument(); 
  83.             docXml.Load(@XmlPath); 
  84.             XmlNodeList xn = docXml.GetElementsByTagName(Node); 
  85.             return xn.Item(0).InnerText.ToString();            
  86.         } 
  87.         #endregion 
  88.         #region 查找数据,返回一个DataSet 
  89.         /************************************************** 
  90.          * 函数名称:GetXmlData(string xmlPath, string XmlPathNode) 
  91.          * 功能说明:查找数据,返回当前节点的所有下级节点,填充到一个DataSet中 
  92.          * 参    数:xmlPath:xml文档路径;XmlPathNode:当前节点的路径 
  93.          * 使用示列: 
  94.          *          using EC; //引用命名空间 
  95.          *          string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //获取xml路径 
  96.          *          DataSet ds = new DataSet(); 
  97.          *          ds = XmlObject.GetXmlData(xmlPath, "root/items");//读取当前路径 
  98.          *          this.GridView1.DataSource = ds; 
  99.          *          this.GridView1.DataBind(); 
  100.          *          ds.Clear(); 
  101.          *          ds.Dispose(); 
  102.          * Xml示例: 
  103.          *         <?xml version="1.0" encoding="utf-8" ?> 
  104.          *            <root> 
  105.          *              <items name="xinnet"> 
  106.          *                <url>http://www.paycenter.com.cn/cgi-bin/</url> 
  107.          *                <port>80</port> 
  108.          *              </items> 
  109.          *            </root> 
  110.          ************************************************/ 
  111.         /// <summary> 
  112.         /// 查找数据,返回当前节点的所有下级节点,填充到一个DataSet中 
  113.         /// </summary> 
  114.         /// <param name="xmlPath">xml文档路径</param> 
  115.         /// <param name="XmlPathNode">节点的路径:根节点/父节点/当前节点</param> 
  116.         /// <returns></returns> 
  117.         public static DataSet GetXmlData(string xmlPath, string XmlPathNode) 
  118.         { 
  119.             XmlDocument objXmlDoc = new XmlDocument(); 
  120.             objXmlDoc.Load(xmlPath); 
  121.             DataSet ds = new DataSet(); 
  122.             StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml); 
  123.             ds.ReadXml(read); 
  124.             return ds;         
  125.         } 
  126.         #endregion 
  127.         #region 更新Xml节点内容 
  128.         /************************************************** 
  129.          * 函数名称:XmlNodeReplace(string xmlPath,string Node,string Content) 
  130.          * 功能说明:更新Xml节点内容 
  131.          * 参    数:xmlPath:xml文档路径;Node:当前节点的路径;Content:内容 
  132.          * 使用示列: 
  133.          *          using EC; //引用命名空间 
  134.          *          string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //获取xml路径 
  135.          *          XmlObject.XmlNodeReplace(xmlPath, "root/test", "56789");  //更新节点内容 
  136.          ************************************************/ 
  137.         /// <summary> 
  138.         /// 更新Xml节点内容 
  139.         /// </summary> 
  140.         /// <param name="xmlPath">xml路径</param> 
  141.         /// <param name="Node">要更换内容的节点:节点路径 根节点/父节点/当前节点</param> 
  142.         /// <param name="Content">新的内容</param> 
  143.         public static void XmlNodeReplace(string xmlPath,string Node,string Content) 
  144.         { 
  145.             XmlDocument objXmlDoc = new XmlDocument(); 
  146.             objXmlDoc.Load(xmlPath); 
  147.             objXmlDoc.SelectSingleNode(Node).InnerText = Content; 
  148.             objXmlDoc.Save(xmlPath); 
  149.              
  150.         } 
  151.         #endregion 
  152.         #region 删除XML节点和此节点下的子节点 
  153.         /************************************************** 
  154.          * 函数名称:XmlNodeDelete(string xmlPath,string Node) 
  155.          * 功能说明:删除XML节点和此节点下的子节点 
  156.          * 参    数:xmlPath:xml文档路径;Node:当前节点的路径; 
  157.          * 使用示列: 
  158.          *          using EC; //引用命名空间 
  159.          *          string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //获取xml路径 
  160.          *          XmlObject.XmlNodeDelete(xmlPath, "root/test");  //删除当前节点 
  161.          ************************************************/ 
  162.         /// <summary> 
  163.         /// 删除XML节点和此节点下的子节点 
  164.         /// </summary> 
  165.         /// <param name="xmlPath">xml文档路径</param> 
  166.         /// <param name="Node">节点路径</param> 
  167.         public static void XmlNodeDelete(string xmlPath,string Node) 
  168.         { 
  169.             XmlDocument objXmlDoc = new XmlDocument(); 
  170.             objXmlDoc.Load(xmlPath); 
  171.             string mainNode = Node.Substring(0, Node.LastIndexOf("/")); 
  172.             objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node)); 
  173.             objXmlDoc.Save(xmlPath); 
  174.         } 
  175.         #endregion 
  176.         #region 插入一个节点和此节点的字节点 
  177.         /************************************************** 
  178.          * 函数名称:XmlInsertNode(string xmlPath, string MailNode, string ChildNode, string Element,string Content) 
  179.          * 功能说明:插入一个节点和此节点的字节点 
  180.          * 参    数:xmlPath:xml文档路径;MailNode:当前节点的路径;ChildNode:新插入的节点;Element:插入节点的子节点;Content:子节点的内容 
  181.          * 使用示列: 
  182.          *          using EC; //引用命名空间 
  183.          *          string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //获取xml路径 
  184.          *          XmlObject.XmlInsertNode(xmlPath, "root/test","test1","test2","测试内容");  //插入一个节点和此节点的字节点 
  185.          * 生成的XML格式为 
  186.          *          <test> 
  187.          *               <test1> 
  188.          *                    <test2>测试内容</test2> 
  189.          *                </test1> 
  190.          *            </test> 
  191.          ************************************************/ 
  192.         /// <summary> 
  193.         /// 插入一个节点和此节点的字节点 
  194.         /// </summary> 
  195.         /// <param name="xmlPath">xml路径</param> 
  196.         /// <param name="MailNode">当前节点路径</param> 
  197.         /// <param name="ChildNode">新插入节点</param> 
  198.         /// <param name="Element">插入节点的子节点</param> 
  199.         /// <param name="Content">子节点的内容</param> 
  200.         public static void XmlInsertNode(string xmlPath, string MailNode, string ChildNode, string Element,string Content) 
  201.         { 
  202.             XmlDocument objXmlDoc = new XmlDocument(); 
  203.             objXmlDoc.Load(xmlPath); 
  204.             XmlNode objRootNode = objXmlDoc.SelectSingleNode(MailNode); 
  205.             XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode); 
  206.             objRootNode.AppendChild(objChildNode); 
  207.             XmlElement objElement = objXmlDoc.CreateElement(Element); 
  208.             objElement.InnerText = Content; 
  209.             objChildNode.AppendChild(objElement); 
  210.             objXmlDoc.Save(xmlPath); 
  211.         } 
  212.         #endregion 
  213.         #region 插入一节点,带一属性 
  214.         /************************************************** 
  215.          * 函数名称:XmlInsertElement(string xmlPath, string MainNode, string Element, string Attrib, string AttribContent, string Content) 
  216.          * 功能说明:插入一节点,带一属性 
  217.          * 参    数:xmlPath:xml文档路径;MailNode:当前节点的路径;Element:新插入的节点;Attrib:属性名称;AttribContent:属性值;Content:节点的内容 
  218.          * 使用示列: 
  219.          *          using EC; //引用命名空间 
  220.          *          string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //获取xml路径 
  221.          *         XmlObject.XmlInsertElement(xmlPath, "root/test", "test1", "Attrib", "属性值", "节点内容");  //插入一节点,带一属性 
  222.          * 生成的XML格式为 
  223.          *          <test> 
  224.          *              <test1 Attrib="属性值">节点内容</test1> 
  225.          *          </test> 
  226.          ************************************************/ 
  227.         /// <summary> 
  228.         /// 插入一节点,带一属性 
  229.         /// </summary> 
  230.         /// <param name="xmlPath">Xml文档路径</param> 
  231.         /// <param name="MainNode">当前节点路径</param> 
  232.         /// <param name="Element">新节点</param> 
  233.         /// <param name="Attrib">属性名称</param> 
  234.         /// <param name="AttribContent">属性值</param> 
  235.         /// <param name="Content">新节点值</param> 
  236.         public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Attrib, string AttribContent, string Content) 
  237.         { 
  238.             XmlDocument objXmlDoc = new XmlDocument(); 
  239.             objXmlDoc.Load(xmlPath); 
  240.             XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode); 
  241.             XmlElement objElement = objXmlDoc.CreateElement(Element); 
  242.             objElement.SetAttribute(Attrib, AttribContent); 
  243.             objElement.InnerText = Content; 
  244.             objNode.AppendChild(objElement); 
  245.             objXmlDoc.Save(xmlPath); 
  246.         } 
  247.         #endregion 
  248.         #region 插入一节点不带属性 
  249.         /************************************************** 
  250.          * 函数名称:XmlInsertElement(string xmlPath, string MainNode, string Element, string Content) 
  251.          * 功能说明:插入一节点不带属性 
  252.          * 参    数:xmlPath:xml文档路径;MailNode:当前节点的路径;Element:新插入的节点;Content:节点的内容 
  253.          * 使用示列: 
  254.          *          using EC; //引用命名空间 
  255.          *          string xmlPath = Server.MapPath("/EBDomainConfig/DomainConfig.xml"); //获取xml路径 
  256.          *          XmlObject.XmlInsertElement(xmlPath, "root/test", "text1", "节点内容");  //插入一节点不带属性 
  257.          * 生成的XML格式为 
  258.          *          <test> 
  259.          *                  <text1>节点内容</text1> 
  260.          *          </test> 
  261.          ************************************************/ 
  262.         public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Content) 
  263.         { 
  264.             XmlDocument objXmlDoc = new XmlDocument(); 
  265.             objXmlDoc.Load(xmlPath); 
  266.             XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode); 
  267.             XmlElement objElement = objXmlDoc.CreateElement(Element); 
  268.             objElement.InnerText = Content; 
  269.             objNode.AppendChild(objElement); 
  270.             objXmlDoc.Save(xmlPath); 
  271.         } 
  272.         #endregion 
  273.         
  274.         //必须创建对象才能使用的类 
  275.         private bool _alreadyDispose = false
  276.         private string xmlPath;  
  277.         private XmlDocument xmlDoc=new XmlDocument();    
  278.         private XmlNode xmlNode; 
  279.         private XmlElement xmlElem;     
  280.         #region 构造与释构 
  281.         public XmlObject() 
  282.         {             
  283.         }        
  284.         ~XmlObject() 
  285.         { 
  286.             Dispose(); 
  287.         } 
  288.         protected virtual void Dispose(bool isDisposing) 
  289.         { 
  290.             if (_alreadyDispose) return
  291.             if (isDisposing) 
  292.             { 
  293.                // 
  294.             } 
  295.             _alreadyDispose = true
  296.         } 
  297.         #endregion 
  298.         #region IDisposable 成员 
  299.         public void Dispose() 
  300.         { 
  301.             Dispose(true); 
  302.             GC.SuppressFinalize(this); 
  303.         } 
  304.         #endregion 
  305.         #region 创建xml文档 
  306.         /************************************************** 
  307.          * 对象名称:XmlObject 
  308.          * 功能说明:创建xml文档         
  309.          * 使用示列: 
  310.          *          using EC; //引用命名空间 
  311.          *          string xmlPath = Server.MapPath("test.xml"); 
  312.          *          XmlObject obj = new XmlObject(); 
  313.          *          创建根节点 
  314.          *          obj.CreateXmlRoot("root"); 
  315.          *          // 创建空节点 
  316.          *          //obj.CreatXmlNode("root", "Node"); 
  317.          *          //创建一个带值的节点 
  318.          *          //obj.CreatXmlNode("root", "Node", "带值的节点"); 
  319.          *          //创建一个仅带属性的节点 
  320.          *          //obj.CreatXmlNode("root", "Node", "Attribe", "属性值"); 
  321.          *          //创建一个仅带两个属性值的节点 
  322.          *          //obj.CreatXmlNode("root", "Node", "Attribe", "属性值", "Attribe2", "属性值2"); 
  323.          *          //创建一个带属性值的节点值的节点 
  324.          *          // obj.CreatXmlNode("root", "Node", "Attribe", "属性值","节点值"); 
  325.          *          //在当前节点插入带两个属性值的节点 
  326.          *          obj.CreatXmlNode("root", "Node", "Attribe", "属性值", "Attribe2", "属性值2","节点值"); 
  327.          *          obj.XmlSave(xmlPath); 
  328.          *          obj.Dispose();         
  329.          ************************************************/ 
  330.         #region 创建一个只有声明和根节点的XML文档 
  331.         /// <summary> 
  332.         /// 创建一个只有声明和根节点的XML文档 
  333.         /// </summary> 
  334.         /// <param name="root"></param> 
  335.         public void CreateXmlRoot(string root) 
  336.         { 
  337.           //加入XML的声明段落 
  338.             xmlNode = xmlDoc.CreateNode(XmlNodeType.XmlDeclaration, """"); 
  339.             xmlDoc.AppendChild(xmlNode); 
  340.             //加入一个根元素 
  341.             xmlElem = xmlDoc.CreateElement("", root, ""); 
  342.             xmlDoc.AppendChild(xmlElem); 
  343.         } 
  344.         #endregion 
  345.         #region 在当前节点下插入一个空节点节点 
  346.         /// <summary> 
  347.         /// 在当前节点下插入一个空节点节点 
  348.         /// </summary> 
  349.         /// <param name="mainNode">当前节点路径</param> 
  350.         /// <param name="node">节点名称</param> 
  351.         public void CreatXmlNode(string mainNode,string node) 
  352.         { 
  353.             XmlNode MainNode = xmlDoc.SelectSingleNode(mainNode); 
  354.             XmlElement objElem = xmlDoc.CreateElement(node);             
  355.             MainNode.AppendChild(objElem); 
  356.         } 
  357.         #endregion 
  358.         #region 在当前节点插入一个仅带值的节点 
  359.         /// <summary> 
  360.         ///  在当前节点插入一个仅带值的节点 
  361.         /// </summary> 
  362.         /// <param name="mainNode">当前节点</param> 
  363.         /// <param name="node">新节点</param> 
  364.         /// <param name="content">新节点值</param> 
  365.         public void CreatXmlNode(string mainNode, string node, string content) 
  366.         { 
  367.             XmlNode MainNode = xmlDoc.SelectSingleNode(mainNode); 
  368.             XmlElement objElem = xmlDoc.CreateElement(node); 
  369.             objElem.InnerText = content; 
  370.             MainNode.AppendChild(objElem); 
  371.         } 
  372.         #endregion 
  373.         #region 在当前节点的插入一个仅带属性值的节点 
  374.         /// <summary> 
  375.         /// 在当前节点的插入一个仅带属性值的节点 
  376.         /// </summary> 
  377.         /// <param name="MainNode">当前节点或路径</param> 
  378.         /// <param name="Node">新节点</param> 
  379.         /// <param name="Attrib">新节点属性名称</param> 
  380.         /// <param name="AttribValue">新节点属性值</param> 
  381.         public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue) 
  382.         { 
  383.             XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode); 
  384.             XmlElement objElem = xmlDoc.CreateElement(Node); 
  385.             objElem.SetAttribute(Attrib, AttribValue); 
  386.             mainNode.AppendChild(objElem); 
  387.         }        
  388.         #endregion 
  389.         #region 创建一个带属性值的节点值的节点 
  390.         /// <summary> 
  391.         /// 创建一个带属性值的节点值的节点 
  392.         /// </summary> 
  393.         /// <param name="MainNode">当前节点或路径</param> 
  394.         /// <param name="Node">节点名称</param> 
  395.         /// <param name="Attrib">属性名称</param> 
  396.         /// <param name="AttribValue">属性值</param> 
  397.         /// <param name="Content">节点传情</param> 
  398.         public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue,string Content) 
  399.         { 
  400.             XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode); 
  401.             XmlElement objElem = xmlDoc.CreateElement(Node); 
  402.             objElem.SetAttribute(Attrib, AttribValue); 
  403.             objElem.InnerText = Content; 
  404.             mainNode.AppendChild(objElem); 
  405.         }        
  406.         #endregion       
  407.         #region 在当前节点的插入一个仅带2个属性值的节点 
  408.         /// <summary> 
  409.         ///  在当前节点的插入一个仅带2个属性值的节点 
  410.         /// </summary> 
  411.         /// <param name="MainNode">当前节点或路径</param> 
  412.         /// <param name="Node">节点名称</param> 
  413.         /// <param name="Attrib">属性名称一</param> 
  414.         /// <param name="AttribValue">属性值一</param> 
  415.         /// <param name="Attrib2">属性名称二</param> 
  416.         /// <param name="AttribValue2">属性值二</param> 
  417.         public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue,string Attrib2,string AttribValue2) 
  418.         { 
  419.             XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode); 
  420.             XmlElement objElem = xmlDoc.CreateElement(Node); 
  421.             objElem.SetAttribute(Attrib, AttribValue); 
  422.             objElem.SetAttribute(Attrib2, AttribValue2); 
  423.             mainNode.AppendChild(objElem); 
  424.         } 
  425.         #endregion 
  426.         #region 在当前节点插入带两个属性的节点 
  427.         /// <summary> 
  428.         ///  在当前节点插入带两个属性的节点 
  429.         /// </summary> 
  430.         /// <param name="MainNode">当前节点或路径</param> 
  431.         /// <param name="Node">节点名称</param> 
  432.         /// <param name="Attrib">属性名称一</param> 
  433.         /// <param name="AttribValue">属性值一</param> 
  434.         /// <param name="Attrib2">属性名称二</param> 
  435.         /// <param name="AttribValue2">属性值二</param> 
  436.         /// <param name="Content">节点值</param> 
  437.         public void CreatXmlNode(string MainNode, string Node, string Attrib, string AttribValue, string Attrib2, string AttribValue2,string Content) 
  438.         { 
  439.             XmlNode mainNode = xmlDoc.SelectSingleNode(MainNode); 
  440.             XmlElement objElem = xmlDoc.CreateElement(Node); 
  441.             objElem.SetAttribute(Attrib, AttribValue); 
  442.             objElem.SetAttribute(Attrib2, AttribValue2); 
  443.             objElem.InnerText = Content; 
  444.             mainNode.AppendChild(objElem); 
  445.         } 
  446.         #endregion 
  447.         #region 保存Xml 
  448.         /// <summary> 
  449.         /// 保存Xml 
  450.         /// </summary> 
  451.         /// <param name="path">保存的当前路径</param> 
  452.         public void XmlSave(string path) 
  453.         { 
  454.             xmlDoc.Save(path); 
  455.         } 
  456.         #endregion 
  457.         #endregion 
  458. #region 根据父节点属性值读取子节点值 
  459.         /************************************************** 
  460.          * 函数名称:GetSubElementByAttribute(string XmlPath, string FatherElenetName, string AttributeName, int AttributeIndex, int ArrayLength) 
  461.          * 功能说明:根据父节点属性值读取子节点值 
  462.          * 参    数: XmlPath:xml路径;FatherElenetName:父节点名;AttributeName:属性值;AttributeIndex:属性索引;ArrayLength:要返回的节点数组长度 
  463.          * 适应用Xml: 
  464.          * <root> 
  465.       *   <page name="/index.aspx"> 
  466.    *      <title>域名注册、虚拟主机、企业邮局、服务器托管、网站空间租用|---第一商务</title> 
  467.    *      <keywords>虚拟主机,域名注册,服务器托管,杭州,服务器租用,</keywords> 
  468.    *      <description>描述内容 </description> 
  469.       *    </page> 
  470.          * </root> 
  471.          *           ArrayList al = new ArrayList(); 
  472.          *           al = EC.XmlObject.GetSubElementByAttribute(XmlPath, "page", "/index.aspx", 0, 3); 
  473.          *           for (int i = 0; i < al.Count; i++) 
  474.          *           { 
  475.          *               Response.Write(al[i].ToString()); 
  476.          *               Response.Write("<br>"); 
  477.          *           } 
  478.          ************************************************/ 
  479.         /// <summary> 
  480.         /// 根据父节点属性读取字节点值 
  481.         /// </summary> 
  482.         /// <param name="XmlPath">xml路径</param> 
  483.         /// <param name="FatherElenetName">父节点名</param> 
  484.         /// <param name="AttributeName">属性值</param> 
  485.         /// <param name="AttributeIndex">属性索引</param> 
  486.         /// <param name="ArrayLength">要返回的节点数组长度</param> 
  487.         /// <returns></returns> 
  488.         public static System.Collections.ArrayList GetSubElementByAttribute(string XmlPath, string FatherElenetName, string AttributeName, int AttributeIndex, int ArrayLength) 
  489.         { 
  490.             System.Collections.ArrayList al = new System.Collections.ArrayList(); 
  491.             XmlDocument docXml = new XmlDocument(); 
  492.             docXml.Load(@XmlPath); 
  493.             XmlNodeList xn = docXml.DocumentElement.ChildNodes; 
  494.             //遍历第一层节点 
  495.             foreach (XmlElement element in xn) 
  496.             { 
  497.                 //判断父节点是否为指定节点 
  498.                 if (element.Name == FatherElenetName) 
  499.                 { 
  500.                     //判断父节点属性的索引是否大于指定索引 
  501.                     if (element.Attributes.Count < AttributeIndex) 
  502.                         return null
  503.                     //判断父节点的属性值是否等于指定属性 
  504.                     if (element.Attributes[AttributeIndex].Value == AttributeName) 
  505.                     { 
  506.                         XmlNodeList xx = element.ChildNodes; 
  507.                         if (xx.Count > 0) 
  508.                         { 
  509.                             for (int i = 0; i < ArrayLength & i < xx.Count; i++) 
  510.                             { 
  511.                                 al.Add(xx[i].InnerText); 
  512.                             } 
  513.                         } 
  514.                     } 
  515.                 } 
  516.             } 
  517.             return al; 
  518.         } 
  519.         #endregion 
  520.         #region 根据节点属性读取子节点值(较省资源模式) 
  521.         /************************************************** 
  522.          * 函数名称:GetSubElementByAttribute(string XmlPath, string FatherElement, string AttributeName, string AttributeValue, int ArrayLength) 
  523.          * 功能说明:根据父节点属性值读取子节点值 
  524.          * 参    数: XmlPath:xml路径;FatherElenetName:父节点名;AttributeName:属性名;AttributeValue:属性值;ArrayLength:要返回的节点数组长度 
  525.          * 适应用Xml: 
  526.          * <root> 
  527.       *   <page name="/index.aspx"> 
  528.    *      <title>域名注册、虚拟主机、企业邮局、服务器托管、网站空间租用|---第一商务</title> 
  529.    *      <keywords>虚拟主机,域名注册,服务器托管,杭州,服务器租用,</keywords> 
  530.    *      <description>描述内容 </description> 
  531.       *    </page> 
  532.          * </root> 
  533.          *           ArrayList al = new ArrayList(); 
  534.          *           al = EC.XmlObject.GetSubElementByAttribute(XmlPath, "page", "@name", "/index.aspx", 3); 
  535.          *           for (int i = 0; i < al.Count; i++) 
  536.          *           { 
  537.          *               Response.Write(al[i].ToString()); 
  538.          *               Response.Write("<br>"); 
  539.          *           } 
  540.          ************************************************/ 
  541.         /// <summary> 
  542.         /// 根据节点属性读取子节点值(较省资源模式) 
  543.         /// </summary> 
  544.         /// <param name="XmlPath">xml路径</param> 
  545.         /// <param name="FatherElement">父节点值</param> 
  546.         /// <param name="AttributeName">属性名称</param> 
  547.         /// <param name="AttributeValue">属性值</param> 
  548.         /// <param name="ArrayLength">返回的数组长度</param> 
  549.         /// <returns></returns> 
  550.         public static  System.Collections.ArrayList GetSubElementByAttribute(string XmlPath, string FatherElement, string AttributeName, string AttributeValue, int ArrayLength) 
  551.         { 
  552.             System.Collections.ArrayList al = new System.Collections.ArrayList(); 
  553.             XmlDocument docXml = new XmlDocument(); 
  554.             docXml.Load(@XmlPath); 
  555.             XmlNodeList xn; 
  556.             xn = docXml.DocumentElement.SelectNodes("//" + FatherElement + "[" + @AttributeName + "='" + AttributeValue + "']"); 
  557.             XmlNodeList xx = xn.Item(0).ChildNodes; 
  558.             for (int i = 0; i < ArrayLength & i < xx.Count; i++) 
  559.             { 
  560.                 al.Add(xx.Item(i).InnerText); 
  561.             } 
  562.             return al; 
  563.         } 
  564.         #endregion 
  565.     } 
原创粉丝点击