C# 如何在不将整个文档加载到内存的情况下处理Xml文件?
如何在不将整个文档加载到内存的情况下添加新节点、更新现有节点和删除xml文档的现有节点 我有一个xml文档,并将其视为应用程序的内存,因此需要能够在不加载整个文档的情况下快速执行数百次读写操作 其结构如下:C# 如何在不将整个文档加载到内存的情况下处理Xml文件?,c#,xml,C#,Xml,如何在不将整个文档加载到内存的情况下添加新节点、更新现有节点和删除xml文档的现有节点 我有一个xml文档,并将其视为应用程序的内存,因此需要能够在不加载整个文档的情况下快速执行数百次读写操作 其结构如下: <spiderMemory> <profileSite profileId="" siteId=""> <links> <link> <originalUrl></originalUrl
<spiderMemory>
<profileSite profileId="" siteId="">
<links>
<link>
<originalUrl></originalUrl>
<isCrawled></isCrawled>
<isBroken></isBroken>
<isHtmlPage></isHtmlPage>
<firstAppearedLevel></firstAppearedLevel>
</link>
</links>
</profileSite>
</spiderMemory>
XDocument如何实现这一点
谢谢您可以使用XmlReader,如下所示:
FileStream stream = new FileStream("test.xml", FileMode.Open);
XmlReader reader = new XmlTextReader(stream);
while(reader.Read())
{
Console.WriteLine(reader.Value);
}
下面是一个更详细的示例,您可以使用XmlReader,如下所示:
FileStream stream = new FileStream("test.xml", FileMode.Open);
XmlReader reader = new XmlTextReader(stream);
while(reader.Read())
{
Console.WriteLine(reader.Value);
}
如果您想快速执行数百次读写操作,这里有一个更详细的示例。。。您可能使用了错误的技术。您是否尝试过使用普通的旧RDBMS 如果您仍然需要XML表示,那么您可以创建一个导出方法来从数据库生成它 XML并不能很好地替代这类问题。只是说说而已
还有。。。把整件事都记在记忆里有什么不对?它能有多大?比如1GB?把它吸起来。比如说1TB?哎呀。但在这种情况下,XML是错误的,错误的,无论如何都是错误的;)太冗长了 如果您想快速执行数百次读写操作。。。您可能使用了错误的技术。您是否尝试过使用普通的旧RDBMS 如果您仍然需要XML表示,那么您可以创建一个导出方法来从数据库生成它 XML并不能很好地替代这类问题。只是说说而已
还有。。。把整件事都记在记忆里有什么不对?它能有多大?比如1GB?把它吸起来。比如说1TB?哎呀。但在这种情况下,XML是错误的,错误的,无论如何都是错误的;)太冗长了 正如Daren Thomas所说,正确的解决方案是根据需要使用RDBMS而不是XML。我有一个使用XML和Java的部分解决方案Stax解析器不解析内存中的整个文档,并且比DOM快得多(但XML解析总是很慢)。“pull解析器”(例如Stax)允许您控制解析的内容。一种不太干净的方法是在获得所需元素时在SAX解析器中抛出异常
要进行修改,最简单(但速度较慢)的方法是使用XPath。另一个(未测试)选项是将XML文件视为文本,然后搜索并替换内容。在这里,您可以使用各种文本搜索优化。正如Daren Thomas所说,正确的解决方案是根据您的需要使用RDBMS而不是XML。我有一个使用XML和Java的部分解决方案Stax解析器不解析内存中的整个文档,并且比DOM快得多(但XML解析总是很慢)。“pull解析器”(例如Stax)允许您控制解析的内容。一种不太干净的方法是在获得所需元素时在SAX解析器中抛出异常
要进行修改,最简单(但速度较慢)的方法是使用XPath。另一个(未测试)选项是将XML文件视为文本,然后搜索并替换内容。在这里,您可以使用各种文本搜索优化。这可能会有帮助:这可能会有帮助:谢谢。我无法为此创建单独的数据库,如果我使用现有的prod数据库,成千上万的请求会降低生产用户的数据库速度。该应用程序的第一个版本使用了内存,我们有200个站点和配置文件组合,每个站点和配置文件都应该被爬网到20个内部级别,因此您可以想象它会很快上升到内存的GBs。用xml做这件事你不会高兴的。对不起,谢谢。我无法为此创建单独的数据库,如果我使用现有的prod数据库,成千上万的请求会降低生产用户的数据库速度。该应用程序的第一个版本使用了内存,我们有200个站点和配置文件组合,每个站点和配置文件都应该被爬网到20个内部级别,因此您可以想象它会很快上升到内存的GBs。用xml做这件事你不会高兴的。很抱歉