📄 subject_34833.htm
字号:
<p>
序号:34833 发表者:杨冬 发表日期:2003-04-02 12:37:29
<br>主题:如何使用c#读取XML文件啊?
<br>内容:网上有些例子,都是使用xmlReader类来实现的<BR>但是对读入的xml文件,如何校验它的合式正确性呢?<BR>也就是说c#中提供哪种机制来判断读入的xml的文件是不是符合xml语法规范的。<BR>我查了很多都没有提到这方面的,自己做了一个试验:<BR>写了一个错误的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>回复者:落叶夏日 回复日期:2003-04-02 18:13:49
<br>内容:学习手记--怎样用c#处理xml文档. <BR>用c#处理xml文档. <BR><BR>本文章讲叙了怎样在c#里处理xml文档,都是些比较基本的。 <BR>首先,我们先自建一个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文档里的指定节点 <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(); //定义一个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>其中//代表里面任意层的子节点。这样可以很快就找到所要的东西。 <BR>SelectSingleNode是找到一个单一的节点,SelectNodes可以找到许多节点 <BR><BR><BR>(2)用XML文档填充列表框,这里只用到<name>节点. <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();//将其当作数据源 <BR> XmlDocument doc = new XmlDocument();//表示XML文档 <BR> doc.Load(Server.MapPath("people.xml")); <BR><BR> //返回一个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>//得到列表项,被选中项的文本 <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("表记录数",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中的数据保存到Xml中,同理,你也可用于DataSet. <BR>,例子中增加了新的一行,并把编辑后的结果保存到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("表记录数",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数据 <BR>C#读取URL里面的XML数据问题,正常情况下,都是读取静态的XML文件,但是在证券领域里面,XML数据是随时更新的。 <BR>比如第三方想我们提供XML数据,我们给第二方作开发,而第三提供给我们的是一个URL,这个URL是XML格式的内容,包含着我们要得数据。 <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#程序就会把从远程ASP页面传过来的XML显示在Console.Out(控制台的输出)了. 关于数据验证是需要你自己来的<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -