如何在 LINQ 中返回第一个子值
本文关键字:第一个 返回 LINQ | 更新日期: 2023-09-27 18:31:49
使用 LINQ,如何仅获取以下 XML 的作者元素值:
<?xml version="1.0" encoding="utf-8"?>
<quotes>
<category name="Sport">
<author>James Small
<quote>Quote One</quote>
<quote>Quote Two</quote>
</author>
</category>
<category name="Music">
<author>
Stephen Swann
<quote />
</author>
</category>
</quotes>
我是 LINQ 的新手,但我试过
Dim quotesXMLList As IEnumerable(Of XElement) = From n In q.Descendants("category") _
Select n
For Each n In quotesXMLList
authorList.Add(n.Value)
Next
但 n.value 返回作者和所有子元素值。
此查询返回所有作者姓名:
var authorNames =
from category in q.Elements("category")
from author in category.Elements("author")
from textNode in author.Nodes().OfType<XText>()
select textNode.Value;
这将安全地检索第一个孩子:
list.Where(x => x.Children.Any()).Select(x => x.Children.First());
您可以通过更改 XML 来使您的生活更轻松:
<?xml version="1.0" encoding="utf-8"?>
<quotes>
<category name="Sport">
<author>
<name>James</name>
<quote>Quote One</quote>
<quote>Quote Two</quote>
</author>
</category>
<category name="Music">
<author>
<name>Stephen</name>
<quote />
</author>
</category>
</quotes>
然后,您可以使用以下内容获取名称:
var nodes =
from item in xdoc.Descendants("name")
select new {author = item.Value};