【问题标题】:how to step through xml elements with the same name如何逐步遍历具有相同名称的xml元素
【发布时间】:2015-02-16 06:46:35
【问题描述】:

好的,这是我在这里的第二篇文章,我仍然对在 vb.net 中使用 XML 感到厌烦。

我知道如何获取具有唯一名称的单个元素所需的数据,但如果重复该过程怎么办?

我的示例是使用 API 与工作中的程序进行交互。当我使用 API 搜索与商店相关的票时,它会返回多个值,如下所示:

<requests>
 <request>
 <form name="requestID">999999</form>
 <form name="userTimeFormat">EEE, MMM d HH:mm:ss z yyyy</form>
 <form name="contact">Contact Name</form>
 <form name="status">Status</form>
 <form name="statusID"></form>
 <form name="priority"></form>
 <form name="supportRep">Tom Smith</form>
 <form name="supportRepCostPerHour">0.00</form>
 <form name="createdTime">Time/Date</form>
 <form name="updatedTime">Time/Date</form>
 <form name="dueByTime">Time/Date</form>
 <form name="isOverDue">T/F</form>
 <form name="accountID"/>
 <form name="account"/>
 <form name="subject">Subject Goes Here</form>
 </request>

 <request>
 <form name="requestID">999998</form>
 <form name="userTimeFormat">EEE, MMM d HH:mm:ss z yyyy</form>
 <form name="contact">Contact Name</form>
 <form name="status">Status</form>
 <form name="statusID"></form>
 <form name="priority"></form>
 <form name="supportRep">Tom Smith</form>
 <form name="supportRepCostPerHour">0.00</form>
 <form name="createdTime">Time/Date</form>
 <form name="updatedTime">Time/Date</form>
 <form name="dueByTime">Time/Date</form>
 <form name="isOverDue">T/F</form>
 <form name="accountID"/>
 <form name="account"/>
 <form name="subject"> Subject Goes Here </form>
 </request>

所以当我使用 XPath 获取信息时,它对于第一个 非常有效,但我的问题是如何移动到下一个 以获取下一组数据?

这是我的代码:

For Each requests As XElement In reader...<request>
            Dim ReqID As String = reader.XPathSelectElement("//form[@name='requestID']")
            Dim contact As String = reader.XPathSelectElement("//form[@name='contact']")

我知道我需要某种循环来重复该过程,但现在我不知所措。感谢任何和所有帮助/cmets。我是编码和 vb 的新手,但我是一个快速而热心的学习者。谢谢。

【问题讨论】:

    标签: xml vb.net xpath foreach elements


    【解决方案1】:

    您已经选择了&lt;request&gt; 元素;但是您必须在每个元素上使用 XPath 表达式,而不是根元素:

    For Each r in xml.XPathSelectElements("//request")
        Dim ReqID As String = r.XPathSelectElement(".//form[@name='requestID']")
        Dim contact As String = r.XPathSelectElement(".//form[@name='contact']")
        ' ...do something... '
    Next
    

    或者,没有 XPath:

    For Each request in xml...<request>
        Dim ReqID = request.<form>.Single(Function(f) f.@name = "requestID").Value
        Dim contact = request.<form>.Single(Function(f) f.@name = "contact").Value
        ' ...do something... '
    Next
    

    【讨论】:

    • 感谢您的回复。我已经尝试了这两种方法,但他们仍然只能从第一个 中获取结果,并根据请求发布多次。我的问题是,如何向下移动到下一个请求并获取下一组数据?它的输出是这样的:999999 联系人 ID 999999 联系人 ID 999999 联系人 ID 等...我想要得到的是:999999 联系人 ID 999998 联系人 ID 等...感谢所有帮助!
    • 更新:我意识到我在别处犯了一个错误,现在一切正常!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多