Доступ к элементу в XmlNodeList с помощью vb.net

#vb.net #xmlnodelist

#vb.net #xmlnodelist

Вопрос:

У меня есть vb.net Список узлов XML, доставляемый из goolle maps api:

 <?xml version="1.0" encoding="UTF-8"?>
<DistanceMatrixResponse>
  <status>OK</status>
  <origin_address>Dusseldorf, Germany</origin_address>
  <destination_address>Wiesenburg, Germany</destination_address>
  <row>
    <element>
      <status>OK</status>
      <duration>
        <value>15931</value>
        <text>4 hours 26 mins</text>
      </duration>
      <distance>
        <value>482793</value>
        <text>483 km</text>
      </distance>
    </element>
  </row>
</DistanceMatrixResponse>
  

Как я могу получить доступ к элементу <text>483 km</text> , используя vb.net ?

Это мой код до сих пор:

     Dim URL As String = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins="   origin   "amp;destinations="   destination   "amp;mode=drivingamp;sensor=falseamp;language=en-ENamp;units=km"
    Dim request As HttpWebRequest = DirectCast(WebRequest.Create(URL), HttpWebRequest)
    Dim response As WebResponse = request.GetResponse()
    Dim dataStream As Stream = response.GetResponseStream()
    Dim sreader As New StreamReader(dataStream)
    Dim responsereader As String = sreader.ReadToEnd()
    response.Close()

    Dim xmldoc As New XmlDocument()
    xmldoc.LoadXml(responsereader)


    If xmldoc.GetElementsByTagName("status")(0).ChildNodes(0).InnerText = "OK" Then

    '##### here comes "Your" code :) #####
  

Я хочу только добавить два местоположения на карты Google и получить расстояние в километрах между ними. Если у вас есть другой подход, я с нетерпением жду его.

С наилучшими пожеланиями, Стефан

Комментарии:

1. Еще одна вещь — вы пробовали использовать WebClient.DownloadString ?

Ответ №1:

Вот сокращенный пример тестового примера для воспроизведения (консольное приложение):

 Dim xml As XDocument =
  <?xml version="1.0" encoding="UTF-8"?>
  <DistanceMatrixResponse>
    <status>OK</status>
    <origin_address>Dusseldorf, Germany</origin_address>
    <destination_address>Wiesenburg, Germany</destination_address>
    <row>
      <element>
        <status>OK</status>
        <duration>
          <value>15931</value>
          <text>4 hours 26 mins</text>
        </duration>
        <distance>
          <value>482793</value>
          <text>483 km</text>
        </distance>
      </element>
    </row>
  </DistanceMatrixResponse>

Dim textElement As XElement =
  xml.Descendants("distance").Elements("text").First()
Console.WriteLine(textElement.Value)
  

В вашем случае вместо присвоения xml переменной некоторого встроенного XML вы будете делать XDocument.Parse(responsereader) .

Что касается проверки состояния (я предполагаю, что вы захотите полностью преобразовать LINQ в XML):

 If xml.Root.Element("status").Value = "OK" Then
  

Ссылка:

Комментарии:

1. Спасибо — это помогло мне, и теперь у меня есть хороший старт для улучшения