⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_34833.htm

📁 一些关于vc的问答
💻 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>&lt;?xml version="1.0" encoding="UTF-8"?&gt; <BR>&lt;peoplelist&gt; <BR>&nbsp;&nbsp;&lt;person&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;Tom Stafford&lt;/name&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;CFO&lt;/title&gt; <BR>&nbsp;&nbsp;&lt;/person&gt; <BR>&nbsp;&nbsp;&lt;person&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;Jane Goodwill&lt;/name&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;CEO&lt;/title&gt; <BR>&nbsp;&nbsp;&lt;/person&gt; <BR>&nbsp;&nbsp;&lt;person&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;Tim Daly&lt;/name&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;CTO&lt;/title&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;title2&gt;CTO0&lt;/title2&gt; <BR>&nbsp;&nbsp;&lt;/person&gt; <BR>&nbsp;&nbsp;&lt;person&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;name&gt;John Graver&lt;/name&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;CSO&lt;/title&gt; <BR>&nbsp;&nbsp;&lt;/person&gt; <BR>&lt;/peoplelist&gt; <BR><BR>将其保存为:people.xml,:) <BR><BR>(1)查找XML文档里的指定节点 <BR>例如:要查找姓名为'Tim Daly'的用户的&lt;title2&gt;,则具体程序如下. <BR>---- <BR>&lt;%@page language="C#"%&gt; <BR>&lt;%@import namespace="System.Xml"%&gt; <BR>&lt;%@import namespace="System.Xml.Xsl"%&gt; <BR>&lt;%@import namespace="System.Xml.XPath"%&gt; <BR>&lt;script language="c#" runat="server"&gt; <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对象。&nbsp;&nbsp;<BR>myDoc.Load(xpath);&nbsp;&nbsp;<BR>message.Text=myDoc.SelectSingleNode ("//person[name='Tim Daly']").ChildNodes.Item(2).InnerText;} <BR>&lt;/script&gt; <BR>&lt;asp:label id="message" forecolor="red" runat="server"/&gt; <BR><BR>解释: <BR><BR>其中//代表里面任意层的子节点。这样可以很快就找到所要的东西。 <BR>SelectSingleNode是找到一个单一的节点,SelectNodes可以找到许多节点 <BR><BR><BR>(2)用XML文档填充列表框,这里只用到&lt;name&gt;节点. <BR><BR>&lt;%@ Page Language="C#" Debug="true" %&gt; <BR>&lt;%@ Import Namespace="System.Collections" %&gt; <BR>&lt;%@ Import Namespace="System.Xml" %&gt; <BR>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;script language="C#" runat="server"&gt; <BR>private void Page_Load(Object sender, EventArgs e)&nbsp;&nbsp;<BR>{ <BR>&nbsp;&nbsp; if (!IsPostBack)&nbsp;&nbsp;<BR>&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;ArrayList values = new ArrayList();//将其当作数据源 <BR>&nbsp;&nbsp;&nbsp;&nbsp;XmlDocument doc = new XmlDocument();//表示XML文档 <BR>&nbsp;&nbsp;&nbsp;&nbsp;doc.Load(Server.MapPath("people.xml")); <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//返回一个XmlNodeList集合,包含与指定名称匹配的所有子代元素列表 <BR>&nbsp;&nbsp;&nbsp;&nbsp;XmlNodeList elemList = doc.GetElementsByTagName("name");//System.Xml 命名空间 <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;for (int i=0; i &lt; elemList.Count; i++) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp; values.Add (elemList[i].InnerXml); <BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; ListBox1.DataSource = values; <BR>&nbsp;&nbsp;&nbsp;&nbsp; ListBox1.DataBind(); <BR>&nbsp;&nbsp;} <BR>} <BR><BR>//得到列表项,被选中项的文本 <BR>private void SubmitBtn_Click(Object sender, EventArgs e)&nbsp;&nbsp;<BR>{ <BR>&nbsp;&nbsp;if(ListBox1.SelectedIndex&gt;-1) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label1.Text = "Selected Option: " + ListBox1.SelectedItem.Text + "&lt;p&gt;"; <BR>} <BR>&lt;/script&gt; <BR>&lt;/head&gt; <BR>&lt;body&gt; <BR>&nbsp;&nbsp; &lt;form runat=server&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;h3&gt;Data Binding ListBox&lt;/h3&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:Label id="Label1" font-name="Verdana" font-size="10pt" runat="server"/&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:ListBox id="ListBox1" SelectionMode="Single" Rows="1" runat="server"/&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:button id="Button1" Text="Submit" OnClick="SubmitBtn_Click" runat="server"/&gt; <BR>&nbsp;&nbsp; &lt;/form&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt; <BR>============================================== <BR>(3)把XML文档通过DataSet读入到Repeater中. <BR>你也可把它读入到DataSet.原理是一样的. <BR>&lt;%@ Import Namespace="System" %&gt; <BR>&lt;%@ Import Namespace="System.IO" %&gt; <BR>&lt;%@ Import Namespace="System.Data" %&gt; <BR>&lt;%@ Page Language="C#"&nbsp;&nbsp;%&gt; <BR>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;title&gt;读入到Repeater&lt;/title&gt; <BR>&lt;script language="C#" runat=server&gt; <BR>public void Page_Load(Object obj,EventArgs e) <BR>{&nbsp;&nbsp;<BR>&nbsp;&nbsp;string xpath="db/people.xml" ;&nbsp;&nbsp;<BR>&nbsp;&nbsp;try <BR>&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;DataSet ds= new DataSet(); <BR>&nbsp;&nbsp;&nbsp;&nbsp;FileStream fs= new FileStream(Server.MapPath(xpath),FileMode.Open,FileAccess.Read,FileShare.ReadWrite) ; <BR>&nbsp;&nbsp;&nbsp;&nbsp;ds.ReadXml(new StreamReader(fs)); <BR>&nbsp;&nbsp;&nbsp;&nbsp;fs.Close(); <BR>&nbsp;&nbsp;&nbsp;&nbsp;Trace.Warn("表记录数",Convert.ToString(ds.Tables[0].Rows.Count)); <BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MyDataList.DataSource=ds.Tables[0].DefaultView; <BR>&nbsp;&nbsp;&nbsp;&nbsp;MyDataList.DataBind(); <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;catch (Exception ed) <BR>&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;Response.Write("&lt;font color=#FF0000&gt;"+ed.ToString()+"&lt;/font&gt;") ; <BR>&nbsp;&nbsp;} <BR>} <BR><BR>&lt;/script&gt; <BR>&lt;/head&gt;&nbsp;&nbsp;<BR>&lt;body &gt; <BR>&lt;ASP:Repeater id="MyDataList" runat="server"&gt; <BR>&lt;headertemplate&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;h5&gt; Viewer Details &lt;/h5&gt; <BR>&lt;/headertemplate&gt; <BR>&lt;itemtemplate&gt; <BR>&lt;br&gt; <BR>&lt;table class="mainheads" width="60%" style="font: 8pt verdana" &gt;&nbsp;&nbsp;<BR>&lt;tr style="background-color:#FFFFCC"&gt;&nbsp;&nbsp;<BR>&lt;td&gt;name:&lt;/td&gt; <BR>&lt;td&gt;&lt;%# DataBinder.Eval(Container.DataItem, "name") %&gt;&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;tr style="background-color:#FFFFCC"&gt; <BR>&lt;td&gt;title:&lt;/td&gt; <BR>&lt;td&gt;&lt;%# DataBinder.Eval(Container.DataItem, "title")%&gt;&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;tr style="background-color:#FFFFCC"&gt; <BR>&lt;td&gt;title2:&lt;/td&gt; <BR>&lt;td&gt;&lt;%# DataBinder.Eval(Container.DataItem, "title2") %&gt;&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;/table&gt;&lt;br&gt; <BR>&lt;/itemtemplate&gt; <BR>&lt;/ASP:Repeater&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt; <BR><BR>&nbsp;&nbsp;<BR><BR>--------- <BR>(4)把Repeater中的数据保存到Xml中,同理,你也可用于DataSet. <BR>,例子中增加了新的一行,并把编辑后的结果保存到XML <BR>&lt;%@ Import Namespace="System" %&gt; <BR>&lt;%@ Import Namespace="System.IO" %&gt; <BR>&lt;%@ Import Namespace="System.Data" %&gt; <BR>&lt;%@ Page Language="C#"&nbsp;&nbsp;Trace="true"%&gt; <BR>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;title&gt;Saurabh's XML Counter Script&lt;/title&gt; <BR>&lt;script language="C#" runat=server&gt; <BR> public void Page_Load(Object obj,EventArgs e) <BR> { <BR>&nbsp;&nbsp; string dataFile="db/people.xml" ;&nbsp;&nbsp;<BR>&nbsp;&nbsp; if(!Page.IsPostBack) <BR>&nbsp;&nbsp;{ <BR>&nbsp;&nbsp; try { <BR>&nbsp;&nbsp;&nbsp;&nbsp; DataSet ds= new DataSet(); <BR>&nbsp;&nbsp;&nbsp;&nbsp; FileStream fint; <BR>&nbsp;&nbsp;&nbsp;&nbsp; fint= new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Read, FileShare.ReadWrite) ; <BR>&nbsp;&nbsp;&nbsp;&nbsp; ds.ReadXml(fint); <BR>&nbsp;&nbsp;&nbsp;&nbsp; fint.Close();&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp; if(Session["counter"]==null) <BR>&nbsp;&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataRow DR=ds.Tables[0].NewRow(); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DR["name"]="myname"; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DR["title"]="test"; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DR["title2"]="test2"; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds.Tables[0].Rows.Add(DR); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileStream fOut ; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fOut = new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Write, FileShare.ReadWrite) ; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds.WriteXml(fOut, XmlWriteMode.WriteSchema); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fOut.Close(); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session["counter"]="Set" ; <BR>&nbsp;&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp;&nbsp;&nbsp; Trace.Warn("表记录数",ds.Tables[0].Rows.Count.ToString()); <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp;catch(Exception edd) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write("&lt;font color=#FF0000&gt;"+edd.ToString()+"&lt;/font&gt;") ; <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;} <BR>} <BR><BR>&lt;/script&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt; <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>&nbsp;&nbsp;class Class1 <BR>&nbsp;&nbsp;{ <BR>&nbsp;&nbsp; [STAThread] <BR>&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args) <BR>&nbsp;&nbsp;&nbsp;&nbsp;{ <BR>&nbsp;&nbsp;&nbsp;&nbsp; XmlDocument doc = new XmlDocument(); <BR>&nbsp;&nbsp;&nbsp;&nbsp; doc.Load("http://www.csdn.net/expert/topic/1094/1094085.xml?temp=.9642145"); <BR>&nbsp;&nbsp;&nbsp;&nbsp; doc.Save(Console.Out ); <BR>&nbsp;&nbsp;&nbsp;&nbsp; } <BR>&nbsp;&nbsp; } <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 + -