XElement - 查找具有两个不同子值的节点

XElement - Find Node with Two Different Child Values

提问人:Kieran Ojakangas 提问时间:11/7/2023 更新时间:11/7/2023 访问量:39

问:

使用下面的此列表:

<People>
    <Continent>Asia</Continent>
    <TimeZone>Hong Kong Standard Time</TimeZone>
    <Person>
        <FirstName>Joe</FirstName>
        <LastName>Stevenson</LastName>
    </Person>
    <Person>
        <FirstName>Joe</FirstName>
        <LastName>Hancock</LastName>
    </Person>
    <Person>
        <FirstName>Kirby</FirstName>
        <LastName>Stevenson</LastName>
    </Person>
</People>

我想使用一些 XElement LINQ 来选择包含 Joe Stevenson 的 FirstName 和 LastName 的节点。我在这里尝试了以下代码:

string trimmedFirstName = "Joe";
string trimmedLastName = "Stevenson";
List<XElement> peopleChildren = convertedPayload.Descendants("Person").Where(a => a.Value.Contains(trimmedFirstName)
                && a.Value.Contains(trimmedLastName)).ToList();

但是当我使用上面的代码时,我相信我什么也没返回,因为我正在尝试检查单个值。我想按值进行选择,与 XElement 名称无关(因此,例如,我应该能够检查某人的姓氏是否为“Joe”,名字是否为“Stevenson”,以便我可以将其更正为我的原始数据的实际名字和姓氏)。

当我在上面的 LINQ 中使用 OR 运算符时,我当然返回了太多元素。

这里有人可以提出建议吗?

C# LINQ-to-XML

评论

0赞 Yong Shun 11/7/2023
您的代码工作正常。演示,所以我不明白你的实际问题是什么。

答:

1赞 Sekhar 11/7/2023 #1

可以使用该方法缩小元素名称的范围。以下方法应该有效。Element

        string trimmedFirstName = "Joe";
        string trimmedLastName = "Stevenson";
        List<XElement> peopleChildren = convertedPayload.Descendants("Person")
            .Where(a => a.Element("FirstName").Value.Contains(trimmedFirstName)
                        && a.Element("LastName").Value.Contains(trimmedLastName)).ToList();