.net 在共享文件夹中的XML文件中快速搜索

.net 在共享文件夹中的XML文件中快速搜索,.net,xml,search,indexing,real-time,.net,Xml,Search,Indexing,Real Time,我需要设计一个windows应用程序,它将驻留在组织的内部网中。应用程序将部署在用户的机器上,用户将在具有预定义模式的XML文件中生成输出。该XML将被写入一个网络文件夹,其他用户可以访问该文件夹。这些文件名为userid_output.xml。从应用程序环境中提取“userid”。在使用应用程序时,用户应该能够搜索由用户生成的所有XML,直到该点。检索到的信息将驱动用户调整其应用程序输入。一个非常明确的要求是不要使用任何RDBMS(Oracle/Sql Server/MySql等)来存储XML

我需要设计一个windows应用程序,它将驻留在组织的内部网中。应用程序将部署在用户的机器上,用户将在具有预定义模式的XML文件中生成输出。该XML将被写入一个网络文件夹,其他用户可以访问该文件夹。这些文件名为userid_output.xml。从应用程序环境中提取“userid”。在使用应用程序时,用户应该能够搜索由用户生成的所有XML,直到该点。检索到的信息将驱动用户调整其应用程序输入。一个非常明确的要求是不要使用任何RDBMS(Oracle/Sql Server/MySql等)来存储XML。共享网络文件夹是“存储库”,仅用于存储XML。托管共享文件夹的计算机可能不会运行任何有助于索引XML或为搜索目的优化数据的服务

鉴于这些限制,有人知道从这个“数据集”执行快速信息检索的设计技术/工具/机制吗


谢谢

您可以使用XQuery。
collection()
函数允许您查询XML文件目录

下面是一个使用Saxon的示例。(我不确定其他实现是否相同。):

集合(“file:///C:/sample_xml?select=*.xml;”)

这将选择
C:\sample\u xml
目录中的所有*.xml文件

您还可以使用XPath缩小结果范围:

集合(“file:///file://///srv1/dir1/sample_xml?select=*.xml;“”/doc/sample1[@id='someID']


这将只返回
sample1
元素,这些元素的属性
id
等于
someID

,听起来像是一些非常糟糕的需求。我们是否应该理解,关键是通过解析磁盘上的未知XML文件,以尽可能快的方式执行搜索,而无需任何索引?如果我被拖到如此地步,我会说再见,解释说没有行业工具我无法完成我的工作。我认为的另一种方法是以某种方式选择性地提取客户端站点上的XML并在内存中执行搜索,但如果超过2000个用户每天输出的数据超过GB,这种方法会很快失败。所以你甚至不能将索引文件存储在存储库中?而且即使是XPath也不会有很大的提高,因为使用XPath仍然需要再次解析XML。它们可以加快速度并帮助找到要解析的文件,但它们不像数据库索引。谢谢。我以前没有使用XQuery的经验,但是在上面的代码片段中,您是否使用collection()在存储在客户机上的C:\sample\u xml目录中形成xml文件的内存表示?如果我们有7000个sample.xml文件,并且只对属性id等于“someId”的标记的值感兴趣,会发生什么?XQuery如何帮助以优化的方式返回该子集而不造成巨大的开销?XQuery与Linq2Xml有何区别?@sc_ray-抱歉,我没有使用Linq2Xml的经验。我将在我的答案中添加另一个示例,说明如何缩小结果范围。在第二个示例中,我还使用了UNC路径来说明如何访问网络目录。谢谢。但是,XQuery是在网络文件夹本身承担繁重的工作,还是“选择、传输并处理大量数据”。我在下面的帖子里读到了类似的内容