使用XPathNavigator类获取所有可能的XPath表达式
本文关键字:XPath 表达式 有可能 XPathNavigator 获取 使用 | 更新日期: 2023-09-27 18:29:29
我已经有了检索Xml:的XPath表达式的算法
- 避免递归此与XML相关的函数
然而,它是不完美的、不安全的,并且需要大量额外的装饰来格式化所获得的表达式。(对于所需格式的示例,我的意思是:使用HtmlAgilityPack获取可用的XPaths及其元素名称)
然后,我最近发现了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
并没有内置这样的概念来帮助您。