这是一个小样本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
的{{1}}并使用LINQ-to-XML获取行号?
因此,从上面的xml中,结果应该给出axs
节点及其两个行号,即3&amp; 5结果。
答案 0 :(得分:1)
您可以使用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();
重要的是,您需要在按照建议here加载文档时传递LoadOptions.SetLineInfo
,否则LineInfo
将返回零:
var document = XDocument.Load(path, LoadOptions.SetLineInfo);