在字典对象中搜索多路径或树枝查询

时间:2014-05-14 03:34:25

标签: c# xml string search xpath

我要通过阅读XPath文件并将其保存在某个对象中来实现类似XML的功能。我已经为此目的使用了字典。

读取XML文件并将其保存在字典对象中,其中键作为从根节点到叶节点的唯一路径,值是由逗号分隔的某些特定数字。所以字典键和值都是String类型。

搜索单个路径查询(如/bookstore/book/author)更容易,因为只有一个具有此特定键的条目可以在字典中找到。

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

我将搜索满足上述查询的所有路径以及字典对象中逗号分隔值的计数。

示例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>

1 个答案:

答案 0 :(得分:0)

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

1)迭代字典中的所有键并将它们缩减为包含/book的一组键,然后调用set2

2)迭代set2中的所有密钥并将其缩小为包含/last-name的一组密钥,然后调用set3

3)从set3中检索原始字典中的所有条目,并得到答案。