使用XPathNavigator类获取所有可能的XPath表达式?

时间:2016-01-07 20:28:27

标签: c# xml vb.net xpath xpathnavigator

我已经有了一个算法来检索Xml的XPath表达式:

但是,它不完美,不安全,并且需要大量额外的装饰来格式化获得的表达式。 (有关所需格式的示例,我的意思是:Get avaliable XPaths and its element names using HtmlAgilityPack

然后,我最近发现了 XPathNavigator 类,并以任何方式改进了当前代码的可靠性,我想知道是否使用XPathNavigator类我可以检索Xml文档的所有XPath exprressions,因为这样我的算法可以基于.Net框架逻辑及其规则的效率而不是单个程序员的不完美逻辑。

我在C#或Vb.Net中搜索解决方案。

这就是我的尝试:

    Dim xDoc As XDocument =
        <?xml version="1.0"?>
        <Document>
            <Tests>
                <Test>
                    <Name>A</Name>
                    <Value>0.01</Value>
                    <Result>Pass</Result>
                </Test>
                <Test>
                    <Name>A</Name>
                    <Value>0.02</Value>
                    <Result>Pass</Result>
                </Test>
                <Test>
                    <Name>B</Name>
                    <Value>1.01</Value>
                    <Result>Fail</Result>
                </Test>
            </Tests>
        </Document>

    Dim ms As New MemoryStream
    xDoc.Save(ms, SaveOptions.None)
    ms.Seek(0, SeekOrigin.Begin)

    Dim xpathDoc As New XPathDocument(ms)
    Dim xpathNavigator As XPathNavigator = xpathDoc.CreateNavigator

    Dim nodes As XPathNodeIterator = xpathNavigator.Select(".//*")

    For Each item As XPathNavigator In nodes
        Console.WriteLine(item.Name)
    Next

使用该代码我只能设法得到这种(不需要的)输出:

Document
Tests
Test
Name
Value
Result
Test
Name
Value
Result
Test
Name
Value
Result
Test
Name
Value
Result

是否可以使用 XPathNavigator 类提取所有XPath表达式?

1 个答案:

答案 0 :(得分:1)

不,那是不可能的。使用XPath选择特定节点的方法有很多种。你可能会对“规范”的概念有所了解。任何给定节点的XPath,但即使这听起来很难指定,XPathNavigator也没有内置的概念来帮助你。