使用 XPathNavigator class 获取所有可能的 XPath 表达式?
Get all possible XPath expressions with XPathNavigator class?
我已经有一个算法来检索 Xml:
的 XPath 表达式
但是,它是不完善的,不安全的,并且需要大量额外的装饰来格式化获得的表达式。
(对于所需格式的示例,我的意思是:Get avaliable XPaths and its element names using HtmlAgilityPack)
然后,我最近发现了 XPathNavigator class,为了以任何方式提高我当前代码的可靠性,我想知道如果使用 XPathNavigator
class 我可以检索 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
是否可以使用XPathNavigatorclass提取所有XPath表达式?
不,那不可能。 select 使用 XPath 的特定节点有很多很多方法。对于任何给定的节点,您可能会确定 "canonical" XPath 的某些概念,但即使这听起来也很难指定,并且 XPathNavigator
没有内置这样的概念来帮助您。
我已经有一个算法来检索 Xml:
的 XPath 表达式但是,它是不完善的,不安全的,并且需要大量额外的装饰来格式化获得的表达式。 (对于所需格式的示例,我的意思是:Get avaliable XPaths and its element names using HtmlAgilityPack)
然后,我最近发现了 XPathNavigator class,为了以任何方式提高我当前代码的可靠性,我想知道如果使用 XPathNavigator
class 我可以检索 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
是否可以使用XPathNavigatorclass提取所有XPath表达式?
不,那不可能。 select 使用 XPath 的特定节点有很多很多方法。对于任何给定的节点,您可能会确定 "canonical" XPath 的某些概念,但即使这听起来也很难指定,并且 XPathNavigator
没有内置这样的概念来帮助您。