使用LINQ搜索XML

时间:2010-04-22 12:12:43

标签: linq-to-xml

以下是我的XML文件。根据{{​​1}},我需要获取<type>的所有节点值。

<customers></customers>

例如,在上面的例子中有两种类型:

  1. 所有者
  2. 卖方。
  3. 因此,如果我选择“所有者”,我需要获得以下详细信息

    <?xml version='1.0' encoding='utf-8' ?>
    <All>
        <Customers>
            <Customer>
                <Name> Brisbane </Name>
                <age> 18 </age>
                <id> 1234 </id>
                <type> owner </type>
            </Customer>
    
            <details>
                <address>  123,Brisbane </address>
                <location> Indonesia </location>
            </details>
            <contact>
                <phone> 123456789 </phone>
                <fax>   12548976 </fax>
            </contact>
        </Customers>
    
        <Customers>
            <Customer>
                <Name> Manila</Name>
                <age> 16 </age>
                <id> 1200 </id>
                <type> seller</type>
            </Customer>
    
            <details>
                <address>  Rich Street </address>
                <location> Fabia </location>
            </details>
    
           <contact>
               <phone> 987456321</phone>
               <fax>   23654897 </fax>
           </contact>
        </Customers>
    </All>
    

    因此,如果我选择“卖家”,我需要获得如下详细信息。

    Brisbane
    18
    1234
    123,Brisbane
    Indonesia
    123456789
    12548976
    

    那我该怎么做?一些示例代码会是什么?

1 个答案:

答案 0 :(得分:0)

好吧说XML被称为“doc”。

        var results_sellers = (from item in doc.Descendants("Customer")
                               where (string)item.Element("type") == "seller"
                               select new { 
                                   Name = item.Element("Name").Value,
                                   Age = item.Element("Age").Value,
                                   Id = item.Element("Id").Value,
                                   Type = item.Element("type").Value
                               });

        //Then you can do the following
        foreach (var e in results_sellers)
        {
            Console.WriteLine(e.Name, e.Id, e.Type, e.Age);
        }