用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< %@page language="C#"%>
4< %@import namespace="System.Xml"%>
5< %@import namespace="System.Xml.Xsl"%>
6< %@import namespace="System.Xml.XPath"%>
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>