C#调用MXL第三方语言(适合新手学习MXL)

  1 using System;
  2 using System.Data;
  3 using System.Configuration;
  4 using System.Web;
  5 using System.Web.Security;
  6 using System.Web.UI;
  7 using System.Web.UI.WebControls;
  8 using System.Web.UI.WebControls.WebParts;
  9 using System.Web.UI.HtmlControls;
 10 using System.Collections;
 11 
 12 //引用命名空间
 13 using System.Xml;
 14  
 16 namespace xmlOp
 17 {
 18 /// 
 19 /// XmlOp类提供对XML数据库的读写
 20 /// 
 21     public class XmlOp
 22     {
 23         //声明一个XmlDocument空对象
 24         protected XmlDocument XmlDoc = new XmlDocument();
 25 
 26         /// 
 27         /// 构造函数,导入Xml文件
 28         /// 
 29         /// 文件虚拟路径
 30         public XmlOp(string xmlFile)
 31         {
 32             try
 33             {
 34                 XmlDoc.Load(GetXmlFilePath(xmlFile));   //载入Xml文档
 35             }
 36             catch (System.Exception ex)
 37             {
 38                 throw ex;
 39             }
 40         }
 41         /// 
 42         /// 析构函数
 43         /// 
 44         ~XmlOp()
 45         {
 46             XmlDoc = null;  //释放XmlDocument对象
 47         }
 48 
 49         /// 
 50         /// 保存文件
 51         /// 
 52         /// 文件虚拟路径
 53         public void Save(string filePath)
 54         {
 55             try
 56             {
 57                 XmlDoc.Save(GetXmlFilePath(filePath));
 58             }
 59             catch (System.Exception ex)
 60             {
 61                 throw ex;
 62             }
 63         }
 64 
 65         /// 
 66         /// 返回Xml文件实际路径
 67         /// 
 68         /// 文件虚拟路径
 69         /// 
 70         public string GetXmlFilePath(string xmlFile)
 71         {
 72             return HttpContext.Current.Server.MapPath(xmlFile);
 73         }
 74 
 75         /// 
 76         /// 根据Xml文件的节点路径,返回一个DataSet数据集
 77         /// 
 78         /// Xml文件的某个节点
 79         /// 
 80         public DataSet GetDs(string XmlPathNode)
 81         {
 82             DataSet ds = new DataSet();
 83             try
 84             {                
 85                 System.IO.StringReader read = new System.IO.StringReader(XmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
 86                 ds.ReadXml(read);   //利用DataSet的ReadXml方法读取StringReader文件流
 87                 read.Close();
 88             }
 89             catch
 90             { }
 91             return ds;
 92         }
 93 
 94         /// 
 95         /// 属性查询,返回属性值
 96         /// 
 97         /// 属性所在的节点
 98         /// 属性
 99         /// 
100         public string SelectAttrib(string XmlPathNode, string Attrib)
101         {
102             string _strNode="";
103             try
104             {
105                 _strNode = XmlDoc.SelectSingleNode(XmlPathNode).Attributes[Attrib].Value;
106             }
107             catch
108             { }
109             return _strNode;
110         }
111 
112         /// 
113         /// 节点查询,返回节点值
114         /// 
115         /// 节点的路径
116         /// 
117         public string SelectNodeText(string XmlPathNode)
118         {
119             string _nodeTxt = XmlDoc.SelectSingleNode(XmlPathNode).InnerText;
120             if (_nodeTxt == null || _nodeTxt == "")
121                 return "";
122             else
123                 return _nodeTxt;
124         }
125 
126         /// 
127         /// 节点值查询判断
128         /// 
129         /// 父节点
130         /// 节点索引
131         /// 节点值
132         /// 
133         public bool SelectNode(string XmlPathNode, int index, string NodeText)
134         {
135             try
136             {
137                 XmlNodeList _NodeList = XmlDoc.SelectNodes(XmlPathNode);
138                 //循环遍历节点,查询是否存在该节点
139                 for (int i = 0; i < _NodeList.Count; i++)
140                 {
141                     if (_NodeList[i].ChildNodes[index].InnerText == NodeText)
142                     {
143                         return true;
144                         break;
145                     }
146                 }
147             }
148             catch
149             {                
150             }
151             return false;
152         }
153 
154         /// 
155         /// 获取子节点个数
156         /// 
157         /// 父节点
158         /// 
159         public int NodeCount(string XmlPathNode)
160         {
161             int i = 0;
162             try
163             {
164                 i=XmlDoc.SelectSingleNode(XmlPathNode).ChildNodes.Count;                
165             }
166             catch
167             {
168                 i=0;
169             }
170             return i;
171         }
172 
173         /// 
174         /// 更新一个节点的内容
175         /// 
176         /// 节点的路径
177         /// 新的节点值
178         /// 
179         public bool UpdateNode(string XmlPathNode,string NodeContent)
180         {
181             try
182             {
183                 XmlDoc.SelectSingleNode(XmlPathNode).InnerText = NodeContent;
184                 return true;
185             }
186             catch
187             {
188                 return false;
189             }
190         }
191 
192         /// 
193         /// 更新N个节点值
194         /// 
195         /// 父节点
196         /// 子节点
197         /// 子节点内容
198         /// 
199         public bool UpdateNode(string XmlParentNode, string[] XmlNode, string[] NodeContent)
200         {               
201             try
202             {
203                 //根据节点数组循环修改节点值
204                 for (int i = 0; i < XmlNode.Length; i++)
205                 {
206                     XmlDoc.SelectSingleNode(XmlParentNode+"/"+XmlNode[i]).InnerText = NodeContent[i];
207                 }
208                 return true;
209             }
210             catch
211             {
212                 return false;
213             }
214         }
215 
216         /// 
217         /// 修改属性
218         /// 
219         /// 属性所在的节点
220         /// 属性名
221         /// 属性值
222         /// 
223         public bool UpdateAttrib(string XmlPathNode, string Attrib,string AttribContent)
224         {
225             try
226             {
227                 //修改属性值
228                 XmlDoc.SelectSingleNode(XmlPathNode).Attributes[Attrib].Value = AttribContent;
229                 return true;
230             }
231             catch
232             {
233                 return false;
234             }
235         }
236 
238         /// 
239         /// 添加属性
240         /// 
241         /// 属性所在节点
242         /// 属性名
243         /// 属性值
244         /// 
245         public bool InsertAttrib(string MainNode,string Attrib, string AttribContent)
246         {
247             try
248             {
249                 XmlElement objNode = (XmlElement)XmlDoc.SelectSingleNode(MainNode); //强制转化成XmlElement对象
250                 objNode.SetAttribute(Attrib, AttribContent);    //XmlElement对象添加属性方法    
251                 return true;
252             }
253             catch
254             {
255                 return false;
256             }
257         }
258 
260         /// 
261         /// 插入一个节点,带N个子节点
262         /// 
263         /// 插入节点的父节点
264         /// 插入节点的元素名
265         /// 插入节点的子节点名数组
266         /// 插入节点的子节点内容数组
267         /// 
268         public bool InsertNode(string MainNode, string ChildNode, string[] Element, string[] Content)
269         {
270             try
271             {
272                 XmlNode objRootNode = XmlDoc.SelectSingleNode(MainNode);    //声明XmlNode对象
273                 XmlElement objChildNode = XmlDoc.CreateElement(ChildNode);  //创建XmlElement对象
274                 objRootNode.AppendChild(objChildNode);  
275                 for (int i = 0; i < Element.Length; i++)    //循环插入节点元素
276                 {
277                     XmlElement objElement = XmlDoc.CreateElement(Element[i]);
278                     objElement.InnerText = Content[i];
279                     objChildNode.AppendChild(objElement);
280                 }
281                 return true;
282             }
283             catch
284             {
285                 return false;
286             }
287         }
288 
289         /// 
290         /// 删除一个节点
291         /// 
292         /// 要删除的节点
293         /// 
294         public bool DeleteNode(string Node)
295         {
296             try
297             {
298                 //XmlNode的RemoveChild方法来删除节点及其所有子节点
299                 XmlDoc.SelectSingleNode(Node).ParentNode.RemoveChild(XmlDoc.SelectSingleNode(Node));
300                 return true;
301             }
302             catch
303             {
304                 return false;
305             }
306         }
307     }
308 }
309 
已知有一个XML文件(bookstore.xml)如下:


  
    Oberon's Legacy
    Corets, Eva
    5.95
  


1、往节点中插入一个节点:
   XmlDocument xmlDoc=new XmlDocument();
   xmlDoc.Load("bookstore.xml");
   XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找
   XmlElement xe1=xmlDoc.CreateElement("book");//创建一个节点
   xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
   xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性

   XmlElement xesub1=xmlDoc.CreateElement("title");
   xesub1.InnerText="CS从入门到精通";//设置文本节点
   xe1.AppendChild(xesub1);//添加到节点中
   XmlElement xesub2=xmlDoc.CreateElement("author");
   xesub2.InnerText="候捷";
   xe1.AppendChild(xesub2);
   XmlElement xesub3=xmlDoc.CreateElement("price");
   xesub3.InnerText="58.3";
   xe1.AppendChild(xesub3);

   root.AppendChild(xe1);//添加到节点中
   xmlDoc.Save("bookstore.xml");
//===============================================
结果为:


  
    Oberon's Legacy
    Corets, Eva
    5.95
  
  
    CS从入门到精通
    候捷
    58.3
  


2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点的文本修改为“亚胜”。
    XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
   foreach(XmlNode xn in nodeList)//遍历所有子节点
   {
    XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
    if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”
    {
     xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”

     XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
     foreach(XmlNode xn1 in nls)//遍历
     {
      XmlElement xe2=(XmlElement)xn1;//转换类型
      if(xe2.Name=="author")//如果找到
      {
       xe2.InnerText="亚胜";//则修改
       break;//找到退出来就可以了
      }
     }
     break;
    }
   }

   xmlDoc.Save("bookstore.xml");//保存。
//==================================================
最后结果为:


  
    Oberon's Legacy
    Corets, Eva
    5.95
  
  
    CS从入门到精通
    亚胜
    58.3
  


3、删除 节点的genre属性,删除 节点。
XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;

   foreach(XmlNode xn in xnl)
   {
    XmlElement xe=(XmlElement)xn;
    if(xe.GetAttribute("genre")=="fantasy")
    {
     xe.RemoveAttribute("genre");//删除genre属性
    }
    else if(xe.GetAttribute("genre")=="update李赞红")
    {
     xe.RemoveAll();//删除该节点的全部内容
    }
   }
   xmlDoc.Save("bookstore.xml");
//===========================================
最后结果为:


  
    Oberon's Legacy
    Corets, Eva
    5.95
  
  
  


4、显示所有数据。
   XmlNode xn=xmlDoc.SelectSingleNode("bookstore");

   XmlNodeList xnl=xn.ChildNodes;

   foreach(XmlNode xnf in xnl)
   {
    XmlElement xe=(XmlElement)xnf;
    Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
    Console.WriteLine(xe.GetAttribute("ISBN"));

    XmlNodeList xnf1=xe.ChildNodes;
    foreach(XmlNode xn2 in xnf1)
    {
     Console.WriteLine(xn2.InnerText);//显示子节点点文本
    }
   }

你可能感兴趣的:(工作总结之旅)