学习手记--怎样用c#处理xml文档.

用c#处理xml文档.

本文章讲叙了怎样在c#里处理xml文档,都是些比较基本的。
首先,我们先自建一个xml文档,如下:

 1<peoplelist>
 2<person>
 3<name>Tom Stafford</name>
 4<title>CFO</title>
 5</person>
 6<person>
 7<name>Jane Goodwill</name>
 8<title>CEO</title>
 9</person>
10<person>
11<name>Tim Daly</name>
12<title>CTO</title>
13<title2>CTO0</title2>
14</person>
15<person>
16<name>John Graver</name>
17<title>CSO</title>
18</person>
19</peoplelist>

将其保存为:people.xml,:)

(1)查找XML文档里的指定节点
例如:要查找姓名为'Tim Daly'的用户的

 1<title2>,则具体程序如下.   
 2\----   
 3&lt; %@page language="C#"%&gt;   
 4&lt; %@import namespace="System.Xml"%&gt;   
 5&lt; %@import namespace="System.Xml.Xsl"%&gt;   
 6&lt; %@import namespace="System.Xml.XPath"%&gt;   
 7<script language="c#" runat="server">   
 8void page_load(Object obj,EventArgs e)   
 9{   
10string xmlfile="people.xml",xpath;   
11xpath=Server.MapPath(xmlfile);   
12XmlDocument myDoc = new XmlDocument(); //定义一个XmlDocument对象。   
13myDoc.Load(xpath);   
14message.Text=myDoc.SelectSingleNode ("//person[name='Tim Daly']").ChildNodes.Item(2).InnerText;}   
15</script>
16<asp:label forecolor="red" id="message" runat="server"></asp:label>
17
18解释: 
19
20其中//代表里面任意层的子节点。这样可以很快就找到所要的东西。   
21SelectSingleNode是找到一个单一的节点,SelectNodes可以找到许多节点 
22
23  
24(2)用XML文档填充列表框,这里只用到<name>节点. 

@ Page Language="C#" Debug="true"

@ Import Namespace="System.Collections"

@ Import Namespace="System.Xml"

 1<html>
 2<head>
 3<script language="C#" runat="server">   
 4private void Page_Load(Object sender, EventArgs e)   
 5{   
 6if (!IsPostBack)   
 7{   
 8ArrayList values = new ArrayList();//将其当作数据源   
 9XmlDocument doc = new XmlDocument();//表示XML文档   
10doc.Load(Server.MapPath("people.xml")); 
11
12//返回一个XmlNodeList集合,包含与指定名称匹配的所有子代元素列表   
13XmlNodeList elemList = doc.GetElementsByTagName("name");//System.Xml 命名空间 
14
15for (int i=0; i < elemList.Count; i++)   
16{   
17values.Add (elemList[i].InnerXml);   
18}   
19ListBox1.DataSource = values;   
20ListBox1.DataBind();   
21}   
22} 
23
24//得到列表项,被选中项的文本   
25private void SubmitBtn_Click(Object sender, EventArgs e)   
26{   
27if(ListBox1.SelectedIndex>-1)   
28Label1.Text = "Selected Option: " + ListBox1.SelectedItem.Text + "<p>";   
29}   
30</script>
31</head>
32<body>
33<form runat="server">
34<h3>Data Binding ListBox</h3>
35<asp:label font-name="Verdana" font-size="10pt" id="Label1" runat="server"></asp:label>
36<asp:listbox id="ListBox1" rows="1" runat="server" selectionmode="Single"></asp:listbox>
37<asp:button id="Button1" onclick="SubmitBtn_Click" runat="server" text="Submit"></asp:button>
38</form>
39</body>
40</html>   
41==============================================   
42(3)把XML文档通过DataSet读入到Repeater中.   
43你也可把它读入到DataSet.原理是一样的.   

@ Import Namespace="System"

@ Import Namespace="System.IO"

@ Import Namespace="System.Data"

@ Page Language="C#"

 1<html>
 2<head>
 3<title>读入到Repeater</title>
 4<script language="C#" runat="server">   
 5public void Page_Load(Object obj,EventArgs e)   
 6{   
 7string xpath="db/people.xml" ;   
 8try   
 9{   
10DataSet ds= new DataSet();   
11FileStream fs= new FileStream(Server.MapPath(xpath),FileMode.Open,FileAccess.Read,FileShare.ReadWrite) ;   
12ds.ReadXml(new StreamReader(fs));   
13fs.Close();   
14Trace.Warn("表记录数",Convert.ToString(ds.Tables[0].Rows.Count));   
15  
16MyDataList.DataSource=ds.Tables[0].DefaultView;   
17MyDataList.DataBind();   
18}   
19catch (Exception ed)   
20{   
21Response.Write("<font color=#FF0000>"+ed.ToString()+"</font>") ;   
22}   
23} 
24
25</script>
26</head>
27<body>
28<asp:repeater id="MyDataList" runat="server">
29<headertemplate>
30<h5> Viewer Details </h5>
31</headertemplate>
32<itemtemplate>
33<br/>
34<table class="mainheads" style="font: 8pt verdana" width="60%">
35<tr style="background-color:#FFFFCC">
36<td>name:</td>
37<td>```
38# DataBinder.Eval(Container.DataItem, "name") 
39```</td>
40</tr>
41<tr style="background-color:#FFFFCC">
42<td>title:</td>
43<td>```
44# DataBinder.Eval(Container.DataItem, "title")
45```</td>
46</tr>
47<tr style="background-color:#FFFFCC">
48<td>title2:</td>
49<td>```
50# DataBinder.Eval(Container.DataItem, "title2") 
51```</td>
52</tr>
53</table><br/>
54</itemtemplate>
55</asp:repeater>
56</body>
57</html>
58
59\---------   
60(4)把Repeater中的数据保存到Xml中,同理,你也可用于DataSet.   
61,例子中增加了新的一行,并把编辑后的结果保存到XML   

@ Import Namespace="System"

@ Import Namespace="System.IO"

@ Import Namespace="System.Data"

@ Page Language="C#" Trace="true"

 1<html>
 2<head>
 3<title>Saurabh's XML Counter Script</title>
 4<script language="C#" runat="server">   
 5public void Page_Load(Object obj,EventArgs e)   
 6{   
 7string dataFile="db/people.xml" ;   
 8if(!Page.IsPostBack)   
 9{   
10try {   
11DataSet ds= new DataSet();   
12FileStream fint;   
13fint= new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Read, FileShare.ReadWrite) ;   
14ds.ReadXml(fint);   
15fint.Close();   
16  
17if(Session["counter"]==null)   
18{   
19DataRow DR=ds.Tables[0].NewRow();   
20  
21DR["name"]="myname";   
22DR["title"]="test";   
23DR["title2"]="test2"; 
24
25ds.Tables[0].Rows.Add(DR);   
26FileStream fOut ;   
27fOut = new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Write, FileShare.ReadWrite) ;   
28ds.WriteXml(fOut, XmlWriteMode.WriteSchema);   
29fOut.Close();   
30Session["counter"]="Set" ;   
31}   
32Trace.Warn("表记录数",ds.Tables[0].Rows.Count.ToString());   
33}   
34catch(Exception edd)   
35{   
36Response.Write("<font color=#FF0000>"+edd.ToString()+"</font>") ;   
37}   
38}   
39} 
40
41</script>
42
43</head></html>
44
45\----------------------   
46(5)读取URL里面的XML数据   
47C#读取URL里面的XML数据问题,正常情况下,都是读取静态的XML文件,但是在证券领域里面,XML数据是随时更新的。   
48比如第三方想我们提供XML数据,我们给第二方作开发,而第三提供给我们的是一个URL,这个URL是XML格式的内容,包含着我们要得数据。   
49这里例子是读取CSDN上的URL.   
50using System;   
51using System.Xml;   
52namespace ConsoleApplication5   
53{   
54class Class1   
55{   
56[STAThread]   
57static void Main(string[] args)   
58{   
59XmlDocument doc = new XmlDocument();   
60doc.Load(" http://www.csdn.net/expert/topic/1094/1094085.xml?temp=.9642145 ");   
61doc.Save(Console.Out );   
62}   
63}   
64}   
65这样,该C#程序就会把从远程ASP页面传过来的XML显示在Console.Out(控制台的输出)了.</name></title2>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus