?? subject_34833.htm
字號:
<p>
序號:34833 發(fā)表者:楊冬 發(fā)表日期:2003-04-02 12:37:29
<br>主題:如何使用c#讀取XML文件啊?
<br>內(nèi)容:網(wǎng)上有些例子,都是使用xmlReader類來實(shí)現(xiàn)的<BR>但是對讀入的xml文件,如何校驗(yàn)它的合式正確性呢?<BR>也就是說c#中提供哪種機(jī)制來判斷讀入的xml的文件是不是符合xml語法規(guī)范的。<BR>我查了很多都沒有提到這方面的,自己做了一個(gè)試驗(yàn):<BR>寫了一個(gè)錯(cuò)誤的xml文件,還是被讀取了。<BR>希望大俠提供幫助,謝謝!
<br><a href="javascript:history.go(-1)">返回上頁</a><br><a href=http://www.copathway.com/cndevforum/>訪問論壇</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回復(fù)者:落葉夏日 回復(fù)日期:2003-04-02 18:13:49
<br>內(nèi)容:學(xué)習(xí)手記--怎樣用c#處理xml文檔. <BR>用c#處理xml文檔. <BR><BR>本文章講敘了怎樣在c#里處理xml文檔,都是些比較基本的。 <BR>首先,我們先自建一個(gè)xml文檔,如下: <BR><BR><?xml version="1.0" encoding="UTF-8"?> <BR><peoplelist> <BR> <person> <BR> <name>Tom Stafford</name> <BR> <title>CFO</title> <BR> </person> <BR> <person> <BR> <name>Jane Goodwill</name> <BR> <title>CEO</title> <BR> </person> <BR> <person> <BR> <name>Tim Daly</name> <BR> <title>CTO</title> <BR> <title2>CTO0</title2> <BR> </person> <BR> <person> <BR> <name>John Graver</name> <BR> <title>CSO</title> <BR> </person> <BR></peoplelist> <BR><BR>將其保存為:people.xml,:) <BR><BR>(1)查找XML文檔里的指定節(jié)點(diǎn) <BR>例如:要查找姓名為'Tim Daly'的用戶的<title2>,則具體程序如下. <BR>---- <BR><%@page language="C#"%> <BR><%@import namespace="System.Xml"%> <BR><%@import namespace="System.Xml.Xsl"%> <BR><%@import namespace="System.Xml.XPath"%> <BR><script language="c#" runat="server"> <BR>void page_load(Object obj,EventArgs e) <BR>{ <BR>string xmlfile="people.xml",xpath; <BR>xpath=Server.MapPath(xmlfile); <BR>XmlDocument myDoc = new XmlDocument(); //定義一個(gè)XmlDocument對象。 <BR>myDoc.Load(xpath); <BR>message.Text=myDoc.SelectSingleNode ("//person[name='Tim Daly']").ChildNodes.Item(2).InnerText;} <BR></script> <BR><asp:label id="message" forecolor="red" runat="server"/> <BR><BR>解釋: <BR><BR>其中//代表里面任意層的子節(jié)點(diǎn)。這樣可以很快就找到所要的東西。 <BR>SelectSingleNode是找到一個(gè)單一的節(jié)點(diǎn),SelectNodes可以找到許多節(jié)點(diǎn) <BR><BR><BR>(2)用XML文檔填充列表框,這里只用到<name>節(jié)點(diǎn). <BR><BR><%@ Page Language="C#" Debug="true" %> <BR><%@ Import Namespace="System.Collections" %> <BR><%@ Import Namespace="System.Xml" %> <BR><html> <BR><head> <BR><script language="C#" runat="server"> <BR>private void Page_Load(Object sender, EventArgs e) <BR>{ <BR> if (!IsPostBack) <BR> { <BR> ArrayList values = new ArrayList();//將其當(dāng)作數(shù)據(jù)源 <BR> XmlDocument doc = new XmlDocument();//表示XML文檔 <BR> doc.Load(Server.MapPath("people.xml")); <BR><BR> //返回一個(gè)XmlNodeList集合,包含與指定名稱匹配的所有子代元素列表 <BR> XmlNodeList elemList = doc.GetElementsByTagName("name");//System.Xml 命名空間 <BR><BR> for (int i=0; i < elemList.Count; i++) <BR> { <BR> values.Add (elemList[i].InnerXml); <BR> } <BR> ListBox1.DataSource = values; <BR> ListBox1.DataBind(); <BR> } <BR>} <BR><BR>//得到列表項(xiàng),被選中項(xiàng)的文本 <BR>private void SubmitBtn_Click(Object sender, EventArgs e) <BR>{ <BR> if(ListBox1.SelectedIndex>-1) <BR> Label1.Text = "Selected Option: " + ListBox1.SelectedItem.Text + "<p>"; <BR>} <BR></script> <BR></head> <BR><body> <BR> <form runat=server> <BR> <h3>Data Binding ListBox</h3> <BR> <asp:Label id="Label1" font-name="Verdana" font-size="10pt" runat="server"/> <BR> <asp:ListBox id="ListBox1" SelectionMode="Single" Rows="1" runat="server"/> <BR> <asp:button id="Button1" Text="Submit" OnClick="SubmitBtn_Click" runat="server"/> <BR> </form> <BR></body> <BR></html> <BR>============================================== <BR>(3)把XML文檔通過DataSet讀入到Repeater中. <BR>你也可把它讀入到DataSet.原理是一樣的. <BR><%@ Import Namespace="System" %> <BR><%@ Import Namespace="System.IO" %> <BR><%@ Import Namespace="System.Data" %> <BR><%@ Page Language="C#" %> <BR><html> <BR><head> <BR><title>讀入到Repeater</title> <BR><script language="C#" runat=server> <BR>public void Page_Load(Object obj,EventArgs e) <BR>{ <BR> string xpath="db/people.xml" ; <BR> try <BR> { <BR> DataSet ds= new DataSet(); <BR> FileStream fs= new FileStream(Server.MapPath(xpath),FileMode.Open,FileAccess.Read,FileShare.ReadWrite) ; <BR> ds.ReadXml(new StreamReader(fs)); <BR> fs.Close(); <BR> Trace.Warn("表記錄數(shù)",Convert.ToString(ds.Tables[0].Rows.Count)); <BR> <BR> MyDataList.DataSource=ds.Tables[0].DefaultView; <BR> MyDataList.DataBind(); <BR> } <BR> catch (Exception ed) <BR> { <BR> Response.Write("<font color=#FF0000>"+ed.ToString()+"</font>") ; <BR> } <BR>} <BR><BR></script> <BR></head> <BR><body > <BR><ASP:Repeater id="MyDataList" runat="server"> <BR><headertemplate> <BR> <h5> Viewer Details </h5> <BR></headertemplate> <BR><itemtemplate> <BR><br> <BR><table class="mainheads" width="60%" style="font: 8pt verdana" > <BR><tr style="background-color:#FFFFCC"> <BR><td>name:</td> <BR><td><%# DataBinder.Eval(Container.DataItem, "name") %></td> <BR></tr> <BR><tr style="background-color:#FFFFCC"> <BR><td>title:</td> <BR><td><%# DataBinder.Eval(Container.DataItem, "title")%></td> <BR></tr> <BR><tr style="background-color:#FFFFCC"> <BR><td>title2:</td> <BR><td><%# DataBinder.Eval(Container.DataItem, "title2") %></td> <BR></tr> <BR></table><br> <BR></itemtemplate> <BR></ASP:Repeater> <BR></body> <BR></html> <BR><BR> <BR><BR>--------- <BR>(4)把Repeater中的數(shù)據(jù)保存到Xml中,同理,你也可用于DataSet. <BR>,例子中增加了新的一行,并把編輯后的結(jié)果保存到XML <BR><%@ Import Namespace="System" %> <BR><%@ Import Namespace="System.IO" %> <BR><%@ Import Namespace="System.Data" %> <BR><%@ Page Language="C#" Trace="true"%> <BR><html> <BR><head> <BR><title>Saurabh's XML Counter Script</title> <BR><script language="C#" runat=server> <BR> public void Page_Load(Object obj,EventArgs e) <BR> { <BR> string dataFile="db/people.xml" ; <BR> if(!Page.IsPostBack) <BR> { <BR> try { <BR> DataSet ds= new DataSet(); <BR> FileStream fint; <BR> fint= new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Read, FileShare.ReadWrite) ; <BR> ds.ReadXml(fint); <BR> fint.Close(); <BR> <BR> if(Session["counter"]==null) <BR> { <BR> DataRow DR=ds.Tables[0].NewRow(); <BR> <BR> DR["name"]="myname"; <BR> DR["title"]="test"; <BR> DR["title2"]="test2"; <BR><BR> ds.Tables[0].Rows.Add(DR); <BR> FileStream fOut ; <BR> fOut = new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Write, FileShare.ReadWrite) ; <BR> ds.WriteXml(fOut, XmlWriteMode.WriteSchema); <BR> fOut.Close(); <BR> Session["counter"]="Set" ; <BR> } <BR> Trace.Warn("表記錄數(shù)",ds.Tables[0].Rows.Count.ToString()); <BR> } <BR> catch(Exception edd) <BR> { <BR> Response.Write("<font color=#FF0000>"+edd.ToString()+"</font>") ; <BR> } <BR> } <BR>} <BR><BR></script> <BR></body> <BR></html> <BR><BR>---------------------- <BR>(5)讀取URL里面的XML數(shù)據(jù) <BR>C#讀取URL里面的XML數(shù)據(jù)問題,正常情況下,都是讀取靜態(tài)的XML文件,但是在證券領(lǐng)域里面,XML數(shù)據(jù)是隨時(shí)更新的。 <BR>比如第三方想我們提供XML數(shù)據(jù),我們給第二方作開發(fā),而第三提供給我們的是一個(gè)URL,這個(gè)URL是XML格式的內(nèi)容,包含著我們要得數(shù)據(jù)。 <BR>這里例子是讀取CSDN上的URL. <BR>using System; <BR>using System.Xml; <BR>namespace ConsoleApplication5 <BR>{ <BR> class Class1 <BR> { <BR> [STAThread] <BR> static void Main(string[] args) <BR> { <BR> XmlDocument doc = new XmlDocument(); <BR> doc.Load("http://www.csdn.net/expert/topic/1094/1094085.xml?temp=.9642145"); <BR> doc.Save(Console.Out ); <BR> } <BR> } <BR>} <BR>這樣,該C#程序就會把從遠(yuǎn)程ASP頁面?zhèn)鬟^來的XML顯示在Console.Out(控制臺的輸出)了. 關(guān)于數(shù)據(jù)驗(yàn)證是需要你自己來的<BR>
<br>
<a href="javascript:history.go(-1)">返回上頁</a><br><a href=http://www.copathway.com/cndevforum/>訪問論壇</a></p></blockquote>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -