zoukankan      html  css  js  c++  java
  • LINQ系列:LINQ to XML查询

    1. 读取XML文件

      XDocument和XElement类都提供了导入XML文件的Load()方法,可以读取XML文件的内容,并转换为XDocument或XElement类的实例。

      示例XML文件:Product.xml

    <?xml version="1.0" encoding="utf-8"?>
    <Products>
      <Product>
        <ProductID>1</ProductID>
        <ProductName>LINQ to XML</ProductName>
        <UnitPrice>10</UnitPrice>
      </Product>
      <Product>
        <ProductID>2</ProductID>
        <ProductName>LINQ to SQL</ProductName>
        <UnitPrice>20</UnitPrice>
      </Product>
    </Products>
    XElement root = XElement.Load(Server.MapPath("Product.xml"));

    2. 查询根元素

    XDocument doc = XDocument.Load(Server.MapPath("Product.xml"));
    
    IEnumerable<XElement> elements = from e in doc.Elements("Products")
                                     select e;
    
    foreach (XElement e in elements)
    {
        Console.WriteLine("{0}-{1}", e.Name, e.Value);
    }
    XDocument doc = XDocument.Load(Environment.CurrentDirectory + @"Product.xml");
    IEnumerable<XElement> elements = from e in doc.Elements("Products")
                                     select e;
    foreach (XElement e in elements)
    {
        Console.WriteLine("{0}-{1}", e.Name, e.Value);
    }

    3.  查询节点

    XDocument doc = XDocument.Load(Environment.CurrentDirectory + @"" + "Product.xml");
    var query = from p in doc.Element("Products").Elements("Product")
                where (int)p.Element("ProductID") == 1
                select p;
    
    query.ToList().ForEach(item =>
    {
        Console.WriteLine("{0}-{1}-{2}", item.Element("ProductID").Value, item.Element("ProductName").Value, item.Element("UnitPrice").Value);
    });
    XElement xml = XElement.Load(Environment.CurrentDirectory + @"" + "Product.xml");
    var query = from p in xml.Elements("Product")
                where (int)p.Element("ProductID") == 1
                select p;

    4. 查询子孙节点

      Descendants轴方法与Elements类型,不过Elements只查找当前元素下的直接子节点,而Descendants则会遍历当前元素下任意层级的子元素。

      示例xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <Products>
      <Product>
        <Book>
          <ProductID>1</ProductID>
          <ProductName>LINQ to XML</ProductName>
          <UnitPrice>10</UnitPrice>
        </Book>
      </Product>
      <Product>
        <Book>
          <ProductID>2</ProductID>
          <ProductName>LINQ to SQL</ProductName>
          <UnitPrice>20</UnitPrice>
        </Book>
      </Product>
    </Products>

      使用Descendants()方法查询:

    XElement root = XElement.Load(Environment.CurrentDirectory + @"" + "Product.xml");
    var query = from b in root.Descendants("Book")
                select b;
    foreach (var item in query)
    {
        Console.WriteLine(item.Element("ProductName").Value);
    }

    5. 查询属性

      示例xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <Products>
      <Product ID="1">
        <ProductID>1</ProductID>
        <ProductName>LINQ to XML</ProductName>
        <UnitPrice>10</UnitPrice>
      </Product>
      <Product ID="2">
        <ProductID>2</ProductID>
        <ProductName>LINQ to SQL</ProductName>
        <UnitPrice>20</UnitPrice>
      </Product>
    </Products>
    XElement xml = XElement.Load(Environment.CurrentDirectory + @"" + "Product.xml");
    var query = from p in xml.Elements("Product")
                where (int)p.Attribute("ID") == 1
                select p;
    XElement xml = XElement.Load(Environment.CurrentDirectory + @"" + "Product.xml");
    var query = from p in xml.Elements("Product")
                where (int)p.Attribute("ID") == 1
                select new
                {
                    ID = p.Attribute("ID").Value,
                    ProductID = p.Element("ProductID").Value,
                    ProductName = p.Element("ProductName").Value
                };
    XElement xml = XElement.Load(Environment.CurrentDirectory + @"" + "Product.xml");
    var query = from p in xml.Nodes().OfType<XElement>()
                where (int)p.Attribute("ID") == 1
                select new
                {
                    ID = p.Attribute("ID").Value,
                    ProductID = p.Element("ProductID").Value,
                    ProductName = p.Element("ProductName").Value
                };
  • 相关阅读:
    Id_Name
    注入类型(Injection Type)
    搭建 Spring 2.5.6 开发环境
    模拟Spring框架
    AJAX 学习笔记 2017_05_04
    Gson 转换hibernate级联对象出现StackOverFlow(堆栈溢出)问题
    页面左侧可收缩菜单案例
    struts1.3.10 和 hibernate 3.3.2 一起加载时 出现javax.servlet.ServletException: java.lang.NoSuchMethodError: antlr.collections.A 错误
    1.21 Java基础总结 数组知识
    1.20 Java基础总结 输入数据类型判断 Java低耦合原则 for嵌套思路
  • 原文地址:https://www.cnblogs.com/libingql/p/4070575.html
Copyright © 2011-2022 走看看