Как пройти через элементы XML с тем же именем

Итак, это мой второй пост здесь, и я все еще зацикливаюсь на работе с XML на vb.net.

Я знаю, как получить данные, которые мне нужны, для отдельных элементов с уникальными именами, но что если этот процесс повторится?

Мой пример, я использую 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']")

Я знаю, что мне нужен какой-то цикл, чтобы повторить процесс, но сейчас я в растерянности. Любая помощь и комментарии приветствуются. Я новичок в кодировании и VB, но я быстрый и энергичный ученик. Благодарю.

1 ответ

Решение

Вы уже выбираете <request> элементы; но вы должны использовать выражение 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
Другие вопросы по тегам