[英]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
,以提取title
和url
文本。 这没有任何条件,例如,no where
,这似乎很简单,但是我正在逐渐衰落,试图做到这一点。
您应该首先实例化一个新的XElement
XElement root = XElement.Parse(xmlString);
然后,您可以获得所有子reference
元素:
IEnumerable<XElement> references = root.Elements("references");
现在假设我们有一个包含title
和url
:
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.