在 C 中根据父值选择 Xml 值#

Select Xml value based on parent value in C#

提问人:Jimmy Boy 提问时间:3/19/2023 更新时间:3/19/2023 访问量:68

问:

我正在尝试通过匹配之前的 id 标签的值来选择 xml 值

<unit>
  <id>1</id>
  <name>foo</name>
</unit>
<unit>
  <id>2</id>
  <name>bar</name>
</unit>

鉴于我的 id 在上述场景中是 2,我想获取值“bar”。

任何建议或图书馆建议都是值得赞赏的。

C# asp.net .NET XML .net-core

评论


答:

2赞 Jon Skeet 3/19/2023 #1

为此,我将使用 LINQ to XML:

  • 找到您想要的元素
  • 使用其属性访问Parentunit
  • 使用该方法获取Elementname

示例代码:

using System.Xml.Linq;

XDocument doc = XDocument.Load("test.xml");
var id = doc.Descendants("id").Where(id => id.Value == "2").SingleOrDefault();
if (id is null)
{
    Console.WriteLine("No such ID");
    return;
}
else
{
    var unit = id.Parent;
    var nameElement = unit?.Element("name");
    if (nameElement is null)
    {
        Console.WriteLine("No name element");
        return;
    }
    string name = nameElement.Value;

    Console.WriteLine($"Name: {name}");
}
0赞 Charlieface 3/19/2023 #2

在将文件加载到 .XDocument

XDocument doc = XDocument.Load("test.xml");
// alternatively XDocument.Parse

var name = doc.Elements("unit")
    .FirstOrDefault(unit => unit.Element("id")?.Value == "2")
    .Element("name")?.Value;