提问人:Kieran Ojakangas 提问时间:11/7/2023 更新时间:11/7/2023 访问量:39
XElement - 查找具有两个不同子值的节点
XElement - Find Node with Two Different Child Values
问:
使用下面的此列表:
<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 运算符时,我当然返回了太多元素。
这里有人可以提出建议吗?
答:
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();
评论