使用 LINQ 读取 XML 节点

本文关键字:节点 XML 读取 LINQ 使用 | 更新日期: 2023-09-27 18:33:52

我在使用 LINQ 读取 XML 文件时遇到问题。

这是我的XML文件

<?xml version="1.0" encoding="utf-8"?>
<Employees>
  <Employee>
    <Name Type="First">Jack</Name>
    <Name Type="Last">Black</Name>
  </Employee>
  <Employee>
    <Name Type="First">John</Name>
    <Name Type="Last">Blue</Name>
  </Employee>
  <Employee>
    <Name Type="First">Dan</Name>
    <Name Type="Last">Red</Name>
  </Employee>
  <Employee>
    <Name Type="First">Patrick</Name>
    <Name Type="Last">Green</Name>
  </Employee>
</Employees>

我使用的代码如下

    XElement doc = XElement.Load("xmldoc.xml");
    var query = from x in doc.Elements("Employee") where x.Element("Name").Attribute("Type").Value == "First" select x;
    foreach (XElement item in query)
    {
        Console.WriteLine(item.Element("Name").Value);
    }

这段代码返回我所有的名字,但是当我将属性值从第一个更改为最后一个时,它显示为空白。

当我切换名称节点时,它会重新调整姓氏。对我来说,看起来每个 employe 查询都从第一个名称节点返回值并忽略第二个节点。你能帮我解决这个问题吗?

使用 LINQ 读取 XML 节点

问题是x.Element("Name")调用将返回第一个Name元素。您实际上需要查询所有Name元素并筛选具有Last属性值的元素。

试试这个:

var query = from x in doc.Elements("Employee").Elements("Name")
            where x.Attribute("Type").Value == "Last"
            select x;
foreach (XElement item in query)
{
    Console.WriteLine(item.Value);
}