J'ai ce code XML que je suis en train de lire dans une hiérarchie d'objets:Noob est l'analyse des données XML Google Earth en utilisant VB.NET, partie III
<?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>
<AddressDetails Accuracy="6" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
<Country>
<CountryNameCode>US</CountryNameCode>
<CountryName>USA</CountryName>
</Country>
</AddressDetails>
</Placemark>
<Placemark id="p2">
<address>Herbert Ave, Warren, MI 48089, USA</address>
<AddressDetails Accuracy="6" xmlns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
<Country>
<CountryNameCode>US</CountryNameCode>
<CountryName>USA</CountryName>
</Country>
</AddressDetails>
</Placemark>
</Response>
</kml>
Voici mes objets:
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
<XmlElementAttribute("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 _AddressDetails As AddressDetails
Private _ID As String
<XmlAttributeAttribute("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
'<XmlAttributeAttribute("Accuracy")> _
Public Property AddressDetails() As AddressDetails
Get
Return _AddressDetails
End Get
Set(ByVal value As AddressDetails)
_AddressDetails = value
End Set
End Property
End Class
Public Class AddressDetails
Private _Country As Country
Public Property Country() As Country
Get
Return _Country
End Get
Set(ByVal value As Country)
_Country = value
End Set
End Property
End Class
Public Class Country
Private _CountryNameCode As String
Public Property CountryNameCode() As String
Get
Return _CountryNameCode
End Get
Set(ByVal value As String)
_CountryNameCode = value
End Set
End Property
Private _CountryName As String
Public Property CountryName() As String
Get
Return _CountryName
End Get
Set(ByVal value As String)
_CountryName = value
End Set
End Property
End Class
End Namespace
... et je me sers de cette routine pour désérialiser le XML dans mes objets:
Fonction publique partagée DeSerializeFromXMLString (ByVal TypeToDeserialize Comme System.Type, _ ByVal xmlString Comme 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
Le problème est lorsque je tente d'analyser le nœud addressdetails. Quelque chose au sujet des Attributs, c'est visser les choses et je ne sais pas comment le gérer. Si je supprime les informations d'attribut sur les nœuds AddressDetails, la désérialisation fonctionne correctement, mais je n'ai pas cette option.
Vous remarquerez peut-être que ma tentative de gestion des attributs de précision a été effectuée comme pour l'attribut ID précédent sur le nœud Placemark.
Que dois-je faire pour l'utiliser avec les informations d'attribut sur les nœuds AddressDetail?
quelle version de .NET utilisez-vous? – apiguy