【发布时间】:2015-05-20 00:46:01
【问题描述】:
我有一个 XML 文件,我想从中检索所有唯一路径。在以下示例中:
<?xml version="1.0" encoding="utf-8"?>
<views>
<invoice>
<newRa elem="0">
<createD>20150514</createD>
<modD>1234</modD>
<sample>text</sample>
</newRa>
<total>1.99</total>
</invoice>
</views>
我要找回:
views/invoice/newRa/createD
views/invoice/newRa/modD
views/invoice/newRa/sample
and so on......
我有一些使用 xPath 的经验,但我不确定如何开始在 VB 中设置一个可以为我完成此任务的子程序。请注意,我正在使用 .NET 2.0,因此无法使用 LINQ。
编辑 1:
Dim xOne As New XmlDocument
xOne.Load("d/input/oneTest.xml")
For Each rNode As XmlNode In xOne.SelectSingleNode("/")
If rNode.HasChildNodes Then
subHasChild(rNode)
End If
Next
Private Sub subHasChild(ByVal cNode As XmlNode)
Dim sNode = cNode.Name
If cNode.HasChildNodes Then
sNode = sNode + "/" + cNode.FirstChild.Name
cNode = cNode.FirstChild
subHasChild(cNode)
End If
Dim sw As New StreamWriter("d:\input\paths.txt")
sw.WriteLine(sNode)
sw.Flush() : sw.Close() : sw.Dispose()
End Sub
【问题讨论】:
-
我将对此发表评论,因为实际编写代码所需的时间比我现在想要的要长。你需要的是一个递归子程序。因此,您将一个变量设置为根
作为节点,并将其传递给循环遍历所有 的子例程的子例程。在该循环中,您为子节点设置一个变量,如果它有子节点,则将其直接传递回子例程。如果它没有孩子,那么您可以获取它的路径并将其存储在数组中或将其写入文件 - 无论您使用它做什么。 -
In VB. | In C#. | In XSLT。 | In Java/SAX.
-
@Tony Hinkle,刚刚更新了我的代码块,我走对了吗?