• 用C#读取XML文档


    本文将以一个非常简单的例子来说明如何使用C#访问一个XML文件并且读取其中的信息。例子本身并无任何实际意义,它只是简单的介绍了如何调用微软的XML标准以及如何运用到实际当中去。希望能够对初次接触C#或者未尝试过通过C#读取XML文件的读者有所启发。本文旨在抛砖引玉,希望能与更多的朋友交流和分享经验。
    制作过程

    1.
    运行Visual Studio.NET,新建Visual C#.NET工程,这里取名为ReadXML。

    2.
    在解决方案资源管理器中,将Form1.cs改名为frmAuthor.cs(此项为可选)。

    3.
    将Form1的Name属性改为frmAuthor,Text属性改为Read XML Document,Font改为Verdana,9pt(此项为可选)。

    4.
    在窗体上添加四个控件:Lable控件(Name: lbl、Text: Author Name:)、ComboBox控件(Name: cboAuthor、DropDownStyle: DropDownList)、RichTextBox控件(Name: richtxt、Text:空)、Button控件(Name: btnShow、Text: Show Author’s Info)。调整各控件的位置,此时用户界面类似于下图:

    5.
    双击窗体,则IDE自动切换到代码编辑窗口,并自动添加了窗体载入方法frmAuthor_Load。在该方法内加入如下代码:

    this.cboAuthor.Items.Add("张爱铃");
    this.cboAuthor.Items.Add("福楼拜");
    this.cboAuthor.Items.Add("马克·吐温"); 
      以上代码添加几条作者名字到ComboBox中去,这些作者的信息在XML文档中有对应项。

        OK,到这里为止,我们所要做的一些程序初始化工作就已经完毕了。下面让我们来看看本例程所要展示的主要知识点。
        在编写访问代码之前,让我们来看看XML文档的内容,如下:

    <?xml version="1.0" encoding="gb2312" ?> 
        <Author>
            <Zhang>
                <Intro>省略</Intro> 
            </Zhang>
            <Fu>
                <Intro>省略</Intro> 
            </Fu>
            <Mark>
                <Intro>省略</Intro> 
            </Mark>
        </Author> 

        这是一个简单的XML文档,每个作者对应一条信息(Intro),共三条信息。我们要做的事情就是通过程序、按照XML文档的结构读取作者的简介,也就是Intro部分的内容。OK,下面就让我们来实现具体的代码。

    1.
    将以上XML文档(取名为Author.xml)放置在工程的根目录下(事实上放在任何地方均可以,但为了便于管理,这里就直接放在工程根目录下)。然后回到VS.NET,在frmAuthor.cs代码中头部添加以下代码:

    using System.Xml;
         用于引用微软System.Xml命名空间。

    2.
    回到frmAuthor.cs[设计]页,双击Show Author’s Info按钮,则IDE自动添加btnShow_Click事件在frmAuthor.cs里。在btnShow_Click事件中,填写以下代码:

    try
    {
    //Declaration
    string strAuthor = this.cboAuthor.Text.Trim();
    string strXMLAuthor = "";
    string strInfo;
    XmlDocument doc = new XmlDocument(); 
    System.Xml.XPath.XPathNavigator nav;
    // = new System.Xml.XPath.XPathNavigator();
    System.Xml.XPath.XPathNodeIterator iterator;
    // = new System.Xml.XPath.XPathNodeIterator();
    
    //Validation
    if( strAuthor == "")
    {
    throw new ArgumentException("Author","You must select a author name!");
    }
    
    //Load XML document
    doc.Load("..\\..\\Author.xml");
    
    //Set nav object
    nav = ((System.Xml.XPath.IXPathNavigable)(doc)).CreateNavigator();
    
    //Justification
    if( strAuthor == "张爱铃" ) strXMLAuthor = "Zhang";
    else if( strAuthor == "福楼拜" ) strXMLAuthor = "Fu";
    else if( strAuthor == "马克·吐温" ) strXMLAuthor = "Mark";
    
    //Set node iterator
    iterator = nav.Select("Author/" + strXMLAuthor);
    
    //Move to the desired node
    iterator.MoveNext();
    
    //Get the value of current node
    strInfo = iterator.Current.Value;
    
    //Display author's information
    this.richtxt.Text = strInfo;
    }
    catch(System.Exception err)
    {
    //Display Error
    MessageBox.Show(err.Message, "ERROR!");
    } 

    3.
    主要代码我们已经填写完毕。下面使用菜单“生成”>“生成解决方案”命令后,按F5即可运行测试程序是否正确了。

    解释部分

    1.
    System.Xml命名空间
    System.Xml 命名空间为处理 XML 提供基于标准的支持。支持的标准包括:


    XML 1.0 - http://www.w3.org/TR/1998/REC-xml-19980210 - 包括 DTD 支持。


    XML 命名空间 - http://www.w3.org/TR/REC-xml-names/ - 流级别和 DOM。


    XSD 架构 - http://www.w3.org/2001/XMLSchema


    XPath 表达式 - http://www.w3.org/TR/xpath


    XSLT 转换 - http://www.w3.org/TR/xslt


    DOM 级别 1 核心 - http://www.w3.org/TR/REC-DOM-Level-1/


    DOM 级别 2 核心 - http://www.w3.org/TR/DOM-Level-2/

    2.
    XPathNavigator类
        XPathNavigator 是基于 XPath 数据模型,并且提供了在任何数据存储区上实现 XPath 查询所需的方法。
        XPathNavigator 提供对数据的只读随机访问。当前节点是指导航器定位在其上的节点。使用任何移动方法都可推进导航器并且属性反映当前节点的值。

    3.
    XPathNodeIterator 类
        XPathNodeIterator 类是指在一组选定的节点上提供迭代程序。Iteractor一词源于Iterate(反复说, 重申, 重述),它会在选定的节点上进行迭代搜索,在我们的例子中,它会寻找符合条件的节点,并获得该节点上的值。

        关于System.Xml命名空间及其子命名空间,可以查阅2002年后的MSDN Library,其中的“命名空间层次结构”一节中,我们可以清楚地看到各System.Xml命名空间的层次结构。
        以上通过一个非常简单的例子来向大家展示如何利用C#及System.Xml命名空间直接访问一个XML文档。当然,本例程中的代码只是一种实现方法,代码也未经过整理和优化,这里只是希望能够通过这个例程给大家展示Visual C#的一个知识点而已

  • 相关阅读:
    Java8常用新特性实践
    Presto集群部署
    Exception: Unexpected End Of File(crontab)
    centos6环境下使用yum安装Ambari
    pyspark进行词频统计并返回topN
    七行代码开始flask
    hibernate初步4
    java四大域总结
    servlet中的转发和重定向问题
    一个web页面的访问的过程
  • 原文地址:https://www.cnblogs.com/hsapphire/p/1705065.html
Copyright © 2020-2023  润新知