zoukankan      html  css  js  c++  java
  • 用C#读取XML指定节点下的值

    -------------------XML code
    <Employees>
      <Employee name="李宇秋" age="23">
        <Address>
           长江路178号
        </Address>
        <Department>
           演唱部
        </Department>
      </Employee>
      <Employee name="曾不可" age="24">
        <Address>
           火星路239号
       </Address>
        <Department>
           舞蹈部
       </Department>
      </Employee>
      <Employee name="张学敌" age="27">
        <Address>
           香港街13号
       </Address>
        <Department>
           偶像部
       </Department>
      </Employee>
    </Employees>
    
    --------------比如:要获取 name="曾不可" 的节点下面的 Address 节点的值“火星路239号”,C#如何实现?

    OK,在linq之前,可以试用XMLDocment将xml整个文件读进来,然后比如可以用xpath再进行分析。
    自从有了linq,一切都变得简单了,实现代码如下:

    //假设以上xml我们保存在一个本地xml文件 D:\Microsoft Work\XMLPath\sampleXML.xml 中
    public List<string> GetXMLResult()
    {
           XElement xelement = XElement.Parse(@"D:\Microsoft Work\XMLPath\sampleXML.xml");
           var query = xelement.Descendants("Employee").Where(x => x.Attribute("name").Value == "曾不可").Select(x => x.Element("Address").Value);
           if (query != null && query.Count() > 0)
                 return query.ToList<string>();
    
           return null;
    }
    

    这样即可。

    OK,我们现在将上面的XML结构稍作改动一下,

    -------------------XML code
    <Employees>
      <Employee name="李宇秋" age="23">
        <Address>
           <Province>
              长江省
           </Province>
           <Road>
              长江路178号
         </Road>
       </Address>
        <Department>
           演唱部
        </Department>
      </Employee>
      <Employee name="曾不可" age="24">
         <Address>
           <Province>
              火星省
         </Province>
           <Road>
              火星路239号
         </Road>
        <Address>
        <Department>
           舞蹈部
       </Department>
      </Employee>
      <Employee name="张学敌" age="27">
        <Address>
           <Province>
              香港省
         </Province>
           <Road>
              香港街239号
         </Road>
        <Address>
        <Department>
           偶像部
       </Department>
      </Employee>
    </Employees>
    
    --------------现在:仍然是要获取 name="曾不可" 的节点下面的 Address 节点下Road结点的值“火星路239号”,
    --------------C#如何实现?

    OK,这时候linq的优势就很明显了,实现代码如下:

    private List<string> GetXMLResult(string xmlPath, string employeeName)
    {
         XElement xelement = XElement.Load(xmlPath);
         var query = xelement.Descendants("Employee").SingleOrDefault(x => x.Attribute("name").Value == employeeName);
         if (query != null && query.Count() > 0)
         {
             var queryResult = query.Descendants("Road").Select(m => m.Value);
             if (queryResult.Count() > 0)
                return queryResult.ToList<string>();
         }
         return null;
    }

    如果没有Linq To XML,用xpath也可以解决这样的取值问题,但是会变得复杂很多。

  • 相关阅读:
    Linux普通用户登录后,命令行提示:-bash-4.1$ ,原因分析及解决
    ps命令
    Linux命令ping
    Linux 系统管理 : last 命令详解
    Linux命令head
    Linux more与less命令
    Mac下开启Chrome非安全模式
    mac host 修改
    mac 电脑记
    a的样式顺序
  • 原文地址:https://www.cnblogs.com/leco/p/1882216.html
Copyright © 2011-2022 走看看