繁体   English   中英

LINQ在C#中查询XML

[英]LINQ to Query XML in C#

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

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

我试图使用LINQ依次查询每个reference ,以提取titleurl文本。 这没有任何条件,例如,no where ,这似乎很简单,但是我正在逐渐衰落,试图做到这一点。

您应该首先实例化一个新的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
});

您可以通过以下方式将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
                    };

看到这个工作演示

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"));
    });
}

尝试这个

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
                });
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM