#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. Спасибо — это помогло мне, и теперь у меня есть хороший старт для улучшения