LINQ在C#中查询XML

时间:2015-05-27 11:58:33

标签: c# xml linq

我有一个非常简单的XML文档

<content>
    <reference>
        <title>www</title>
        <url>http://xxx</url>
    </reference>
    <reference>
        <title>yyy</title>
        <url>http://zzz</url>
   </reference>
</content>

我正在尝试使用LINQ依次查询每个reference以提取titleurl中的文本。任何一个都没有任何条件,例如,没有where,这似乎很简单,但我有终端大脑褪色试图完成这个。

4 个答案:

答案 0 :(得分:4)

您应该首先实例化一个新的XElement

XElement root = XElement.Parse(xmlString);

然后您可以获得所有子reference元素:

IEnumerable<XElement> references = root.Elements("references");

现在假设我们有一个包含titleurl的类:

public class Info {
     public string Title { get; set; }
     public string Url { get; set; }
}

我们可以将reference元素映射到这些类:

IEnumerable<Info> infos = references.Select(r => new Info() {
        Title = r.Element("title").Value,
        Url = r.Element("url").Value
});

答案 1 :(得分:1)

您可以使用XDocument类和LINQ以下方式:

string MyXml = @"<RootNode>
                 ........
                 ........
                 </RootNode>";

XDocument xdoc= XDocument.Parse(MyXml);

var result =  from reference in xdoc.Descendants("reference")
              select new
                    {
                       Title = reference.Element("title").Value,
                       Url = reference.Element("url").Value
                    };

请参阅this working DEMO

答案 2 :(得分:1)

void Main()
{
    var xml = @"<content>
                    <reference>
                        <title>www</title>
                        <url>http://xxx</url>
                    </reference>
                    <reference>
                        <title>yyy</title>
                        <url>http://zzz</url>
                    </reference>
                </content>";


    XElement.Parse(xml).Elements("reference").ToList().ForEach(x => 
    {
        Console.WriteLine("Title: {0}, URL: {1}", x.Element("title"), x.Element("url"));
    });
}

答案 3 :(得分:0)

试试这个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication30
{
    class Program
    {
        static void Main(string[] args)
        {
            string input =
                "<content>" +
                    "<reference>" +
                        "<title>www</title>" +
                        "<url>http://xxx</url>" +
                    "</reference>" +
                    "<reference>" +
                        "<title>yyy</title>" +
                        "<url>http://zzz</url>" +
                   "</reference>" +
                "</content>";

            XDocument doc = XDocument.Parse(input);

            var results = doc.Descendants("reference")
                .Select(x => new {
                    title = x.Descendants("title").FirstOrDefault().Value,
                    url = x.Descendants("url").FirstOrDefault().Value
                });
        }
    }
}