gpt4 book ai didi

c# - XPathSelectElement 非常慢;有没有更好的方法来获取给定 XPath 的值?

转载 作者:数据小太阳 更新时间:2023-10-29 02:58:26 26 4
gpt4 key购买 nike

我有一个文件,基本上是一个 XPath 列表,如下所示:

/Options/File[1]/Settings[1]/Type[1]
/Options/File[1]/Settings[1]/Path[1]
/Options/File[1]/Settings[2]/Type[1]
/Options/File[1]/Settings[2]/Path[1]
/Options/File[2]/Settings[1]/Type[1]
/Options/File[2]/Settings[1]/Path[1]

我需要从中等大小的 XML 文件 (~3-5MB) 中的这些 XPath 指向的元素中获取值。使用 XPathSelectElement 效果很好,但速度非常慢。有没有更快的方法来对 Linq to XML 或什至手动遍历 XML 做同样的事情?

在一个相关问题中,XPath 中的索引值和从 XElement 返回的元素顺序保证相同吗?例如,这些会返回相同的结果吗:

xdoc.XPathSelectElement("/Options/File[1]/Settings[2]);

xdoc.root.Elements("File").ElementAt(0).Elements("Settings").ElementAt(1);

最佳答案

索引 XPath(第 n 个 child )通常很慢,因为需要遍历所有 child 直到您需要的 child 。要检查 - 对于相对较大的文件,请尝试选择第一个 child 和最后一个 child 并比较差异(每个重复约 1000 次并使用 StopWatch 进行测量)。

如果您的 XPath 与您展示的一样,您可以通过在迭代时缓存子节点来手动进行选择。

XML 中元素的顺序很重要,因此普通的 XML API 将始终保持元素的顺序。请注意,属性的顺序对于 XML 并不重要,因此属性的顺序在查询(不太可能,但理论上可能)和不同 API 之间可能不相同。

关于c# - XPathSelectElement 非常慢;有没有更好的方法来获取给定 XPath 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10001766/

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