gpt4 book ai didi

c# - 如何使用 XElement 或 XDocument 查找具有重复属性值的节点?

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:02 24 4
gpt4 key购买 nike

这是一个小示例 xml

<parentNode>
<c-node>
<myNode axs="p1">Anything goes</myNode>
<myNode axs="p2">Nothing <aa>is</aa> here</myNode>
<myNode axs="p1">Whatever it may be</myNode>
<myNode axs="p3">...</myNode>
</c-node>
</parentNode>

如何找到 myNode具有重复的属性值 axs并使用 LINQ-to-XML 获取行号?

所以从上面的xml,结果应该是<myNode axs="p1">节点及其两个行号,即 3 和 5 作为结果。

最佳答案

您可以使用 group by 获取重复的元素,并且可以将 XElement 转换为 IXmlLineInfo 以获取行号 (credits here):

var nodes = document.Descendants("myNode")
.GroupBy(node => (string)node.Attribute("axs"))
.Where(g => g.Count() > 1)
.SelectMany(g => g.Select(node => new
{
Node = node,
LineNumber = (node as IXmlLineInfo).LineNumber
}))
.ToList();

重要的是您需要在按照建议加载文档时传递 LoadOptions.SetLineInfo here否则 LineInfo 将返回零:

var document = XDocument.Load(path, LoadOptions.SetLineInfo);

关于c# - 如何使用 XElement 或 XDocument 查找具有重复属性值的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49736754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com