xml - 以XML返回不同的路径

标签 xml vb.net xpath

我有一个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

最佳答案

试试这个:

    Dim xd = <?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>

    Dim getPaths As Func(Of XElement, IEnumerable(Of String)) = Nothing
    getPaths = Function(xe) _
        If(xe.Elements().Any(), _
            xe.Elements() _
                .SelectMany( _
                    Function(x) getPaths(x), _
                    Function(x, p) xe.Name.ToString() + "/" + p) _
                .Distinct(), _
            { xe.Name.ToString() })

    Dim paths = getPaths(xd.Root)


它给了我:

views/invoice/newRa/createD 
views/invoice/newRa/modD 
views/invoice/newRa/sample 
views/invoice/total 


它正确地摆脱了重复的路径。

关于xml - 以XML返回不同的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30338446/

相关文章:

python - Lettuce Webdriver 无法通过 xpath 找到我的链接

javascript - 如何解析 vb.net 中用一堆 document.write 编写的网页?

xml - 构建SLN : CS0008 - CS0115的奇怪错误

java - Android继续循环动画

mysql - vb.net System.ArgumentOutOfRangeException 未处理

.net - FlowLayoutPanel - 控件的自动宽度?

python - 使用 Selenium Python 从页面源获取元标记

python - 当 xml 标签名称包含大写字母时,BeautifulSoup 引发 AttributeError

java - 将 xml 插入 pdf

.net - 将对象转换为字符串的最佳实践