El análisis de Google Earth datos XML utilizando VB.NET
-
18-09-2019 - |
Pregunta
Esta es una versión simplificada del XML devuelto.
<?xml version="1.0" encoding="UTF-8" ?>
<kml xmlns="http://earth.google.com/kml/2.0">
<Response>
<name>1321 herbert street, Warren, MI</name>
<Status>
<code>200</code>
<request>geocode</request>
</Status>
<Placemark id="p1">
<address>Herbert St, Madison Heights, MI 48071, USA</address>
</Placemark>
<Placemark id="p2">
<address>Add2</address>
</Placemark>
</Response>
</kml>
En un anterior posterior, que receieved ayuda sobre cómo analizar estos datos en objetos. Ahora. Necesito un poco más de ayuda poco al tratar de leer en teh nodos marca de posición que se repiten.
Esta es la estructura del objeto que estoy tratando de leer en:
Namespace GoogleAddress
Public Class kml
Private _Response As Response
Public Property Response() As Response
Get
Return _Response
End Get
Set(ByVal value As Response)
_Response = value
End Set
End Property
End Class
Public Class Response
Private _name As String
Public Property name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Private _Status As Status
Public Property Status() As Status
Get
Return _Status
End Get
Set(ByVal value As Status)
_Status = value
End Set
End Property
Private _Placemark() As Placemark
'
Public Property Placemark() As Placemark()
Get
Return _Placemark
End Get
Set(ByVal value As Placemark())
_Placemark = value
End Set
End Property
End Class
Public Class Status
Private _Code As Integer
Public Property Code() As Integer
Get
Return _Code
End Get
Set(ByVal value As Integer)
_Code = value
End Set
End Property
Private _Request As String
Public Property Request() As String
Get
Return _Request
End Get
Set(ByVal value As String)
_Request = value
End Set
End Property
End Class
Public Class Placemark
Private _Address As String
Public Property Address() As String
Get
Return _Address
End Get
Set(ByVal value As String)
_Address = value
End Set
End Property
End Class
End Namespace
Yo uso la siguiente rutina para deserializar el XML se muestra arriba y poblar el objeto anterior:
Public Shared Function DeSerializeFromXMLString(ByVal TypeToDeserialize As System.Type, _
ByVal xmlString As String) As Object
Dim bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(xmlString)
Dim mem As MemoryStream = New MemoryStream(bytes)
Dim ser As System.Xml.Serialization.XmlSerializer = New System.Xml.Serialization.XmlSerializer(GetType(GoogleAddress.kml), "http://earth.google.com/kml/2.0")
Dim KmlResult As GoogleAddress.kml = TryCast(ser.Deserialize(mem), GoogleAddress.kml) '
Return KmlResult
End Function
... Pero theobjects no están siendo adecuadamente pobladas y yo no reciben ningún objeto marca de posición (0 gama len).
Cualquier suggstions?
Solución
Es necesario especificar algunos Atributos .
Namespace GoogleAddress
Public Class kml
Private _Response As Response
Public Property Response() As Response
Get
Return _Response
End Get
Set(ByVal value As Response)
_Response = value
End Set
End Property
End Class
Public Class Response
Private _name As String
Public Property name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Private _Status As Status
Public Property Status() As Status
Get
Return _Status
End Get
Set(ByVal value As Status)
_Status = value
End Set
End Property
<Xml.Serialization.XmlElement("Placemark")> Public Placemark As Placemark()
End Class
Public Class Status
Private _Code As Integer
Public Property Code() As Integer
Get
Return _Code
End Get
Set(ByVal value As Integer)
_Code = value
End Set
End Property
Private _Request As String
Public Property Request() As String
Get
Return _Request
End Get
Set(ByVal value As String)
_Request = value
End Set
End Property
End Class
Public Class Placemark
Private _Address As String
Private _ID As String
<Xml.Serialization.XmlAttribute("ID")> Public Property ID() As String
Get
Return _ID
End Get
Set(ByVal value As String)
_ID = value
End Set
End Property
Public Property Address() As String
Get
Return _Address
End Get
Set(ByVal value As String)
_Address = value
End Set
End Property
End Class
End Namespace
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow