gpt4 book ai didi

C# XPathSelectElement() 当有多个匹配时

转载 作者:行者123 更新时间:2023-11-30 21:53:23 27 4
gpt4 key购买 nike

我们在我支持的应用程序中得到了意想不到的结果,因为代码在匹配多个项目的路径上调用 XPathSelectElement()。举例说明:

XElement e = XElement.Parse(@"<root>
<child ID="123">A</child>
<child ID="234">B</child>
</root>");
Console.Out.WriteLine(e.XPathSelectElement("//child").Value);

在这个简单的例子中,它返回“A”。在我们更复杂的生产代码中,它似乎返回的是最后一场比赛。

明确地说,我将通过在 XPath 中进行额外过滤来修复此错误,以使查询结果唯一。我不想依赖于滥用 XPathSelectElement() 方法。

但是,我想确定我了解它当前(错误地)在做什么。我无法找到任何关于这种情况下预期行为的文档。还是这只是一种非标准行为,您不能期望在不同环境/版本/等之间表现一致?

最佳答案

XPathSelectElements 的文档说 ( https://msdn.microsoft.com/en-us/library/bb342176%28v=vs.110%29.aspx ) “虽然返回集合的顺序没有在 XML XPath 语言 1.0 推荐中指定,但是这个扩展方法按文档顺序返回节点。”。 XPathSelectElement ( http://referencesource.microsoft.com/#System.Xml.Linq/System/Xml/Linq/XNodeNavigator.cs,7b67622e3ab8770e ) 的实现只是做 return node.XPathSelectElements(expression, resolver).FirstOrDefault(); .因此,基于此,您应该获得第一个选择的值 child文档顺序中的元素。如果您得到不同的结果,我会认为这是一个错误,但我们需要有一个最小但完整的 XML 和 .NET 示例,以便我们重现结果。

关于C# XPathSelectElement() 当有多个匹配时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33897653/

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