繁体   English   中英

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

[英]Get all possible XPath expressions with XPathNavigator class?

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

但是,它是不完美,不安全的,并且需要大量其他修饰才能格式化所获得的表达式。 (对于所需格式的示例,我的意思是: 使用HtmlAgilityPack获取可用的XPath及其元素名称

然后,我最近发现了XPathNavigator类,并以任何方式提高了我当前代码的可靠性,我想知道是否可以使用XPathNavigator类检索Xml文档的所有XPath表达式,因为这样我的算法可以基于.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表达式?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM