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 /// <summary>
 19 /// XmlOp类提供对XML数据库的读写
 20 /// </summary>
 21     public class XmlOp
 22     {
 23         //声明一个XmlDocument空对象
 24         protected XmlDocument XmlDoc = new XmlDocument();
 25 
 26         /// <summary>
 27         /// 构造函数,导入Xml文件
 28         /// </summary>
 29         /// <param name="xmlFile">文件虚拟路径</param>
 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         /// <summary>
 42         /// 析构函数
 43         /// </summary>
 44         ~XmlOp()
 45         {
 46             XmlDoc = null;  //释放XmlDocument对象
 47         }
 48 
 49         /// <summary>
 50         /// 保存文件
 51         /// </summary>
 52         /// <param name="filePath">文件虚拟路径</param>
 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         /// <summary>
 66         /// 返回Xml文件实际路径
 67         /// </summary>
 68         /// <param name="xmlFile">文件虚拟路径</param>
 69         /// <returns></returns>
 70         public string GetXmlFilePath(string xmlFile)
 71         {
 72             return HttpContext.Current.Server.MapPath(xmlFile);
 73         }
 74 
 75         /// <summary>
 76         /// 根据Xml文件的节点路径,返回一个DataSet数据集
 77         /// </summary>
 78         /// <param name="XmlPathNode">Xml文件的某个节点</param>
 79         /// <returns></returns>
 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         /// <summary>
 95         /// 属性查询,返回属性值
 96         /// </summary>
 97         /// <param name="XmlPathNode">属性所在的节点</param>
 98         /// <param name="Attrib">属性</param>
 99         /// <returns></returns>
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         /// <summary>
113         /// 节点查询,返回节点值
114         /// </summary>
115         /// <param name="XmlPathNode">节点的路径</param>
116         /// <returns></returns>
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         /// <summary>
127         /// 节点值查询判断
128         /// </summary>
129         /// <param name="XmlPathNode">父节点</param>
130         /// <param name="index">节点索引</param>
131         /// <param name="NodeText">节点值</param>
132         /// <returns></returns>
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         /// <summary>
155         /// 获取子节点个数
156         /// </summary>
157         /// <param name="XmlPathNode">父节点</param>
158         /// <returns></returns>
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         /// <summary>
174         /// 更新一个节点的内容
175         /// </summary>
176         /// <param name="XmlPathNode">节点的路径</param>
177         /// <param name="Content">新的节点值</param>
178         /// <returns></returns>
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         /// <summary>
193         /// 更新N个节点值
194         /// </summary>
195         /// <param name="XmlParentNode">父节点</param>
196         /// <param name="XmlNode">子节点</param>
197         /// <param name="NodeContent">子节点内容</param>
198         /// <returns></returns>
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         /// <summary>
217         /// 修改属性
218         /// </summary>
219         /// <param name="XmlPathNode">属性所在的节点</param>
220         /// <param name="Attrib">属性名</param>
221         /// <param name="Content">属性值</param>
222         /// <returns></returns>
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         /// <summary>
239         /// 添加属性
240         /// </summary>
241         /// <param name="MainNode">属性所在节点</param>
242         /// <param name="Attrib">属性名</param>
243         /// <param name="AttribContent">属性值</param>
244         /// <returns></returns>
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         /// <summary>
261         /// 插入一个节点,带N个子节点
262         /// </summary>
263         /// <param name="MainNode">插入节点的父节点</param>
264         /// <param name="ChildNode">插入节点的元素名</param>
265         /// <param name="Element">插入节点的子节点名数组</param>
266         /// <param name="Content">插入节点的子节点内容数组</param>
267         /// <returns></returns>
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         /// <summary>
290         /// 删除一个节点
291         /// </summary>
292         /// <param name="Node">要删除的节点</param>
293         /// <returns></returns>
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)如下:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
</bookstore>

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

   XmlElement xesub1=xmlDoc.CreateElement("title");
   xesub1.InnerText="CS从入门到精通";//设置文本节点
   xe1.AppendChild(xesub1);//添加到<book>节点中
   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);//添加到<bookstore>节点中
   xmlDoc.Save("bookstore.xml");
//===============================================
结果为:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
  </book>
</bookstore>

2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。
    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");//保存。
//==================================================
最后结果为:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book genre="update李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>亚胜</author>
    <price>58.3</price>
  </book>
</bookstore>

3、删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属性,删除 <book genre="update李赞红" ISBN="2-3631-4">节点。
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");
//===========================================
最后结果为:
<?xml version="1.0" encoding="gb2312"?>
<bookstore>
  <book ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
  </book>
  <book>
  </book>
</bookstore>

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);//显示子节点点文本
    }
   }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值