zoukankan      html  css  js  c++  java
  • C#+Xpath 处理Xml

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

    <?xml version="1.0" encoding="UTF-8"?>
    <peoplelist>
      <person>
        <name>Tom Stafford</name>
        <title>CFO</title>
      </person>
      <person>
        <name>Jane Goodwill</name>
        <title>CEO</title>
      </person>
      <person>
        <name>Tim Daly</name>
        <title>CTO</title>
        <title2>CTO0</title2>
      </person>
      <person>
        <name>John Graver</name>
        <title>CSO</title>
      </person>
    </peoplelist>

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

    (1)查找XML文档里的指定节点
    例如:要查找姓名为'Tim Daly'的用户的<title2>,则具体
    程序如下.
    ----
    <
    %@page language="C#"%>
    <
    %@import namespace="System.Xml"%>
    <
    %@import namespace="System.Xml.Xsl"%>
    <
    %@import namespace="System.Xml.XPath"%>
    <script language="c#" runat="server">
    void page_load(Object obj,EventArgs e)
    {
    string xmlfile="people.xml",xpath;
    xpath=Server.MapPath(xmlfile);
    XmlDocument myDoc = new XmlDocument(); //定义一个XmlDocument对象。
    myDoc.Load(xpath);
    message.Text=myDoc.SelectSingleNode ("//person[name='Tim Daly']").ChildNodes.Item(2).InnerText;}
    </script>
    <
    asp:label id="message" forecolor="red" runat="server"/>

    解释:

    其中//代表里面任意层的子节点。这样可以很快就找到所要的东西。
    SelectSingleNode是找到一个单一的节点,SelectNodes可以找到许多节点


    (2)用XML文档填充列表框,这里只用到<name>节点.

    <%@ Page Language="C#" Debug="true" %>
    <%@ Import Namespace="System.Collections" %>
    <%@ Import Namespace="System.Xml" %>
    <html>
    <head>
    <script language="C#" runat="server">
    private void Page_Load(Object sender, EventArgs e)
    {
       if (!IsPostBack)
      {
        ArrayList values = new ArrayList();//将其当作数据源
        XmlDocument doc = new XmlDocument();//表示XML文档
        doc.Load(Server.MapPath("people.xml"));

        //返回一个XmlNodeList集合,包含与指定名称匹配的所有子代元素列表
        XmlNodeList elemList = doc.GetElementsByTagName("name");//System.Xml 命名空间

        for (int i=0; i < elemList.Count; i++)
        {  
         values.Add (elemList[i].InnerXml);
        } 
         ListBox1.DataSource = values;
         ListBox1.DataBind();
      }
    }

    //得到列表项,被选中项的文本
    private void SubmitBtn_Click(Object sender, EventArgs e)
    {
      if(ListBox1.SelectedIndex>-1)
           Label1.Text = "Selected Option: " + ListBox1.SelectedItem.Text + "<p>";
    }
    </script>
    </head>
    <body>
       <form runat=server>
         <h3>Data Binding ListBox</h3>
         <
    asp:Label id="Label1" font-name="Verdana" font-size="10pt" runat="server"/>
         <
    asp:ListBox id="ListBox1" SelectionMode="Single" Rows="1" runat="server"/>
         <
    asp:button id="Button1" Text="Submit" onClick="SubmitBtn_Click" runat="server"/>
       </form>
    </body>
    </html>
    ==============================================
    (3)把XML文档通过DataSet读入到Repeater中.
    你也可把它读入到DataSet.原理是一样的.
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Page Language="C#"  %>
    <html>
    <head>
    <title>读入到Repeater</title>
    <script language="C#" runat=server>
    public void Page_Load(Object obj,EventArgs e)

      string xpath="db/people.xml" ; 
      try
      {
        DataSet ds= new DataSet();
        FileStream fs= new FileStream(Server.MapPath(xpath),FileMode.Open,FileAccess.Read,FileShare.ReadWrite) ;
        ds.ReadXml(new StreamReader(fs));
        fs.Close();
        Trace.Warn("表记录数",Convert.ToString(ds.Tables[0].Rows.Count));
       
        MyDataList.DataSource=ds.Tables[0].DefaultView;
        MyDataList.DataBind();
      }
      catch (Exception ed)
      {
        Response.Write("<font color=#FF0000>"+ed.ToString()+"</font>") ;
      }
    }

    </script>
    </head> 
    <body >
    <ASP:Repeater id="MyDataList" runat="server">
    <headertemplate>
        <h5> Viewer Details </h5>
    </headertemplate>
    <itemtemplate>
    <br>
    <table class="mainheads" width="60%" style="font: 8pt verdana" >
    <tr style="background-color:#FFFFCC"> 
    <td>name:</td>
    <td><%# DataBinder.Eval(Container.DataItem, "name") %></td>
    </tr>
    <tr style="background-color:#FFFFCC">
    <td>title:</td>
    <td><%# DataBinder.Eval(Container.DataItem, "title")%></td>
    </tr>
    <tr style="background-color:#FFFFCC">
    <td>title2:</td>
    <td><%# DataBinder.Eval(Container.DataItem, "title2") %></td>
    </tr>
    </table><br>
    </itemtemplate>
    </ASP:Repeater>
    </body>
    </html>

    ------------------------------------------------------------------------
    (4)把Repeater中的数据保存到Xml中,同理,你也可用于DataSet.
    ,例子中增加了新的一行,并把编辑后的结果保存到XML
    <%@ Import Namespace="System" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Page Language="C#"  Trace="true"%>
    <html>
    <head>
    <title>Saurabh's XML Counter Script</title>
    <script language="C#" runat=server>
     public void Page_Load(Object obj,EventArgs e)
     {
       string dataFile="db/people.xml" ; 
       if(!Page.IsPostBack)
      {
       try {
         DataSet ds= new DataSet();
         FileStream fint;
         fint= new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Read, FileShare.ReadWrite) ;
         ds.ReadXml(fint);
         fint.Close(); 
       
         if(Session["counter"]==null)
         {
           DataRow DR=ds.Tables[0].NewRow();
           DR["name"]="myname";
           DR["title"]="test";
           DR["title2"]="test2";

       ds.Tables[0].Rows.Add(DR);
           FileStream fOut ;
           fOut = new FileStream(Server.MapPath(dataFile), FileMode.Open, FileAccess.Write, FileShare.ReadWrite) ;
           ds.WriteXml(fOut, XmlWriteMode.WriteSchema);
           fOut.Close();
           Session["counter"]="Set" ;
         }
         Trace.Warn("表记录数",ds.Tables[0].Rows.Count.ToString());
        }
        catch(Exception edd)
        {
          Response.Write("<font color=#FF0000>"+edd.ToString()+"</font>") ;
        }
      }
    }

    </script>
    </body>
    </html>
     

    ----------------------------------------------------------------------------
    (5)读取URL里面的XML数据
    C#读取URL里面的XML数据问题,正常情况下,都是读取静态的XML
    文件,但是在证券领域里面,XML数据是随时更新的。
    比如第三方想我们提供XML数据,我们给第二方作开发,而第三提供给我们的是一个URL,这个URL是XML格式的内容,包含着我们要得数据。
    这里例子是读取
    CSDN上的URL.
    using System;
    using System.Xml;
    namespace ConsoleApplication5
    {
      class Class1
      {
       [STAThread]
        static void Main(string[] args)
        {
         XmlDocument doc = new XmlDocument();
         doc.Load("
    http://www.csdn.net/expert/topic/1094/1094085.xml?temp=.9642145");
         doc.Save(Console.Out );
         }
       }
    }
    这样,该C#
    程序就会把从远程ASP页面传过来的XML显示在Console.Out(控制台的输出)了.

  • 相关阅读:
    Angular2 表单
    PHP Windows环境部署
    CI 扩展 Service
    Angular2 组件生命周期
    linux 命令笔记
    CI 笔记一
    Angular2 管道
    Angular2 指令
    springboot整合Quartz实现动态配置定时任务
    vue-app开发入门
  • 原文地址:https://www.cnblogs.com/qfcndtt/p/2590040.html
Copyright © 2011-2022 走看看