ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-13 10:08:25  阅读:283  来源: 互联网

标签:c mobile xml compact-framework xmltextreader


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

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

我必须通过以前使用的XPath查询(仅供参考)说明几个级别:

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

我觉得这很烦人但很简单.但是,我似乎无法让循环正确.

我需要获取一个节点,检查其下的节点以查看该值是否与目标字符串匹配,然后再向下走(如果有)或跳过该分支(如果不匹配).

事实上,我认为我的问题是,如果我没有把它分开,我不知道如何忽略一个分支.我不能允许它走不相关的分支,因为元素名称不是唯一的(如XPath查询所示).

我以为我可以保留一些布尔,例如当我点击Profile节点时,bool expectingProfileName被设置为true.但是,如果它不是我想要的特定配置文件节点,我就无法离开那个分支.

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

我想发布一部分文件,但无法弄清楚结构的粗略程度:

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

我将知道ProfileName,ScreenName和SettingName,我需要设置节点.

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

任何提示将不胜感激.

UPDATE

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

大多数标准的文件并不大,这就是系统最初被编码为使用XmlDocument的原因.它目前是4MB,显然大到足以在移动应用程序加载到XmlDocument时崩溃.它可能就像它现在出现的那样,因为文件会变得更大.无论如何,我现在正在尝试DataSet建议,但仍然对其他想法持开放态度.

更新2

我有点怀疑,因为有不少人说他们不会指望这么大的文件会让系统崩溃.进一步的实验表明,这是间歇性的崩溃.昨天它每次都崩溃了,但今天早上我重置设备后,我无法重现它.我现在正试图找出一套可靠的生殖步骤.并且还决定了解决问题的最佳方法,我相信它仍然存在.我不能放弃它,因为如果应用程序无法访问此文件,它是无用的,我不认为可以告诉我的用户,当我的应用程序运行时,他们无法在他们的设备上运行任何其他内容… ….

解决方法:

看看XPathDocument.

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

标签:c,mobile,xml,compact-framework,xmltextreader
来源: https://codeday.me/bug/20190713/1448704.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有