Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在字典对象中搜索多路径或细枝查询_C#_Xml_String_Search_Xpath - Fatal编程技术网

C# 在字典对象中搜索多路径或细枝查询

C# 在字典对象中搜索多路径或细枝查询,c#,xml,string,search,xpath,C#,Xml,String,Search,Xpath,我必须通过读取XML文件并将其保存在某个对象中来实现类似于XPath的功能。为此我用了这本字典 XML文件被读取并保存在dictionary对象中,其中键是从根节点到叶节点的唯一路径,值是一些用逗号分隔的特定数字。因此,字典键和值都是字符串类型 搜索像/bookstore/book/author这样的单路径查询更容易,因为在字典中只能找到一个具有此特定键的条目 在此字典对象中搜索多路径或细枝查询的最佳方法是什么?示例查询可以是//book//last name 我必须搜索满足上述查询的所有路径以

我必须通过读取XML文件并将其保存在某个对象中来实现类似于XPath的功能。为此我用了这本字典

XML文件被读取并保存在dictionary对象中,其中键是从根节点到叶节点的唯一路径,值是一些用逗号分隔的特定数字。因此,字典键和值都是字符串类型

搜索像/bookstore/book/author这样的单路径查询更容易,因为在字典中只能找到一个具有此特定键的条目

在此字典对象中搜索多路径或细枝查询的最佳方法是什么?示例查询可以是//book//last name

我必须搜索满足上述查询的所有路径以及dictionary对象中逗号分隔值的计数

下面显示了一个示例XML文件

<?xml version='1.0'?> 
<!-- This file represents a fragment of a book store inventory database --> 
<bookstore> 
    <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0"> 
        <title>The Autobiography of Benjamin Franklin</title> 
        <author> 
            <first-name>Benjamin</first-name> 
            <last-name>Franklin</last-name> 
        </author> 
        <price>8.99</price> 
    </book> 
    <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2"> 
        <title>The Confidence Man</title> 
        <author> 
            <first-name>Herman</first-name> 
            <last-name>Melville</last-name> 
        </author> 
        <price>11.99</price> 
    </book> 
    <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6"> 
        <title>The Gorgias</title> 
        <author> 
            <name>Plato</name> 
        </author> 
        <price>9.99</price> 
    </book> 
</bookstore>

如果您有绝对XPath字典,并且希望匹配//book//last name,则需要执行3个步骤:

1迭代字典中的所有键,并将它们减少为一组包含/book的键,我们称之为set 2

2迭代set2中的所有键,并将它们减少为一组包含/last name的键,让我们调用该set3


3从原始词典中检索set3中的所有条目,您就有了答案。

这意味着我必须使集合的数量等于查询中存在的//的数量?那树枝呢?我还需要知道搜索和检索的最快方法。我必须使用正则表达式还是一些字符串匹配函数才能有效地使用?在我描述的机制中,集合的数量将等于XPath中的步骤数量。我不能告诉你哪一种是最快的机制,你没有给我任何关于你的输入数据或你正在实现这个的编程语言的信息。您已选择使用字典类型,因此我认为这将决定您的性能。如果您只是想快速完成这项工作,我建议如果您有大量数据,那么将其加载到原生XML数据库(如eXist)中,并让它执行您的XPath。我用的是C,它在关键字中。我试图在不使用XPath的情况下评估查询处理的性能。