gpt4 book ai didi

c# - 大型 XML 文件,XmlDocument 不可行但需要能够搜索

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

我正在努力处理一个合理的逻辑循环,以便从一个太大而无法与支持 .NET 类的 XPath 一起使用的 XML 文件中剥离节点。

我正在尝试用执行相同但使用 XmTextReader 的代码替换我拥有的单行代码(使用 XPath 查询字符串调用 SelectNodes)。

如之前使用的 XPath 查询(仅供引用)所示,我必须向下几个级别:

ConfigurationRelease/Profiles/Profile[Name='MyProfileName']/Screens/Screen[Id='MyScreenId']/Settings/Setting[Name='MySettingName']

我认为这会很烦人但很简单。但是,我似乎无法正确使用循环。

我需要获取一个节点,检查该节点下的一个节点以查看该值是否与目标字符串匹配,如果匹配则继续往下走,如果不匹配则跳过该分支。

事实上,我认为我的问题是如果我不感兴趣的话我不知道如何忽略一个分支。我不允许它走不相关的分支,因为元素名称不是唯一的(如 XPath 查询所示)。

我以为我可以维护一些 bool 值,例如bool expectingProfileName 在我点击 Profile 节点时设置为 true。但是,如果它不是我想要的特定配置文件节点,我将无法退出该分支。

所以......希望这对某人有意义......我已经盯着这个问题看了几个小时,可能只是遗漏了一些明显的东西......

我想发布文件的一部分,但无法弄清楚结构大致是这样的:

ConfigRelease > Profiles > Profile > Name > Screens > Screen > Settings > Setting > Name

我会知道 ProfileName、ScreenName 和 SettingName,我需要设置节点。

我试图避免一次性读取整个文件,例如在应用程序启动时,因为其中一半的内容永远不会被使用。我也无法控制生成 xml 文件的内容,因此无法将其更改为生成多个较小的文件。

任何提示将不胜感激。

更新

我已经重新打开了这个。海报建议 XPathDocument 应该是完美的。不幸的是,我没有提到这是一个移动应用程序并且不支持 XPathDocument。

按照大多数标准,该文件并不大,这就是系统最初编码为使用 XmlDocument 的原因。它目前是 4MB,显然大到足以在将移动应用程序加载到 XmlDocument 中时使它崩溃。它可能与现在出现的一样好,因为文件预计会变得更大。不管怎样,我现在正在尝试数据集建议,但我仍然对其他想法持开放态度。

更新 2

我很怀疑,因为很多人都说他们不希望这么大的文件导致系统崩溃。进一步的实验表明,这是间歇性崩溃。昨天它每次都崩溃但是今天早上我重置设备后,我无法重现它。我现在正试图找出一套可靠的繁殖步骤。并确定处理问题的最佳方法,我确定该问题仍然存在。我不能只留下它,因为如果应用程序无法访问此文件,它就没用了,而且我不认为可以告诉我的用户当我的应用程序运行时他们不能在他们的设备上运行任何其他东西...... ....

最佳答案

看看<a href="http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathdocument.aspx" rel="noreferrer noopener nofollow">XPathDocument</a> .

XPathDocument 比 XmlDocument 更轻量,并且针对只读 XPath 查询进行了优化。

关于c# - 大型 XML 文件,XmlDocument 不可行但需要能够搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/557527/

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