• 学习Professional ASP.NET 2.0 XML(一)


           最近在wrox的网站上下了很多代码,一直没时间来看,碰好今天是星期天,闲下来看看里面的代码学点东西.wrox的例子总是循序渐进,所以很容易理解.

    一.创建XML读取器.

    在.net2.0中用新的方法Create()创建XML实例

    第一个例子读取,XML文件的元素值,如<item>



    显示效果如下

    首先创建XmlReader实例

    根据reader.Depth深度值返回值其name,Depth就是是返回元素从跟节点开始所在的位置,如下面的XML文件

    <?xml version='1.0'?>
    <employees>
      
    <employee id="1">    
        
    <name>
          
    <firstName>Nancy</firstName>
          
    <lastName>Davolio</lastName> 
        
    </name>
        
    <city>Seattle</city>
        
    <state>WA</state>
        
    <zipCode>98122</zipCode>     
      
    </employee>
      
    <employee id="2">    
        
    <name>
          
    <firstName>Andrew</firstName>
          
    <lastName>Fuller</lastName>
        
    </name>
        
    <city>Tacoma</city>
        
    <state>WA</state>
        
    <zipCode>98401</zipCode>     
      
    </employee> 
    </employees>


    emplpyees的depth为0,emplyoee的depth为1,name的德depth为2,firstName和lastName的depth为3

    下面看一下name属性

    name获取当前节点的限定名,返回的名称取决于节点的 NodeType,上面的NodeType类型为Element(标记名),所以返回标记名.


    接着继续看第二个例子,读取标记中的属性,根据上面的例子延伸


    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Xml" %>
    <script runat="server">
        
    void Page_Load(object sender, EventArgs e)
        
    {
            
    //XML文件路径
            string xmlFilePath = Request.PhysicalApplicationPath + @"\Employees.xml";
            
    try
            
    {
                
    //创建XmlReader实例
                using (XmlReader reader = XmlReader.Create(xmlFilePath))
                
    {
                    
    string result;
                    
    while (reader.Read())
                    
    {
                        
    //判断节点类型
                        if (reader.NodeType == XmlNodeType.Element)
                        
    {
                            
                            result 
    = "";
                            
    for (int count = 1; count <= reader.Depth; count++)
                            
    {
                                result 
    += "===";
                            }

                            result 
    += "=> " + reader.Name;
                            lblResult.Text 
    += result;
                            
    // 判断节点是否有属性存在
                            if (reader.HasAttributes)
                            
    {
                                lblResult.Text 
    += " (";
                                Response.Write(
    "<br>"+reader.AttributeCount);
                                
    for (int count = 0; count < reader.AttributeCount; count++)
                                
    {
                                    
    //索引属性
                                    reader.MoveToAttribute(count);
                                    lblResult.Text 
    += reader.Name+",";
                                }

                                lblResult.Text 
    += ")";
                                
    //索引当前属性节点
                                reader.MoveToElement();
                            }

                            lblResult.Text 
    += "<br/>";
                        }

                    }

                }

            }

            
    catch (Exception ex)
            
    {
                lblResult.Text 
    = "发生错误: " + ex.Message;
            }
            
        }

    </script>

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        
    <title>读取XML属性</title>
    </head>
    <body>
        
    <form id="form1" runat="server">
        
    <div>
            
    <asp:label id="lblResult" runat="server" />
        
    </div>
        
    </form>
    </body>
    </html>


    这个例子比上面多了几行代码,从判断节点属性是否存在开始.获取属性数AttributeCount,

    然后根据属性位置MoveToAttribute()返回属性名称. 最后还有一个reader.MoveToElement()方法,当在派生类中被重写时,移动到包含当前属性节点的元素

    其返回一个布尔值 如果拿掉这句话以Response.Write(reader.MoveToElement());代替的话,其值为true表示读取器定位在属性上,

    添加这个方法的话返回值为false即读取器不是定位在属性上
    reader.MoveToElement();
    Response.Write(reader.MoveToElement());

    大家可以测试一下.了解上面几个属性和方法就应该明白怎么读取的了.

    例子继续.

    第三个例子继续深入,读取XML元素值和属性值,也先来看一下代码




    先熟悉几个方法

    GetAttribute 方法 获取属性的值
    ReadString 方法 将元素或文本节点的内容当做字符串读取
    ReadElementContentAsInt 方法 读取当前元素并将内容作为 32 位有符号整数返回

    这个例子是根据元素一个一个进行判断,再获取值的.最后还要判断是否XML文件结尾判断节点类型是否为EndElement末尾元素标记.


    接着还有最后一个例子,其实是介绍XmlReaderSettings.
    这个对象可以设定XML的一些功能.比如是否忽略空白,注释

    1XmlReaderSettings settings = new XmlReaderSettings();
    2settings.IgnoreComments = true;
    3settings.IgnoreWhitespace = true;
    4XmlReader reader = XmlReader.Create(xmlFilePath, settings)

    具体的还得看MSDN,可能我说的很多都不对,只是把自己学习的过程记录下来.也希望对大家有帮助
  • 相关阅读:
    Mac部署hadoop3.2.1(伪分布式) ,Hadoop自带的MapReduce程序(wordcount),,,,安装scala,hadoop安装启动问题,Pyspark开发环境搭建,MAC Spark安装和环境变量设置
    使用objdump objcopy查看与修改符号表
    alias, bg, bind, break, builtin, caller, cd, command,
    virtualbox端口转发
    CMake快速入门教程-实战
    内存管理
    http调试工具,linux调试工具
    CSS Background
    RadioButton的check改变的时候
    Docs-->.NET-->API reference-->System.​Web.​UI.​Web​Controls-->Repeater
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/376361.html
Copyright © 2020-2023  润新知