Noob est l'analyse des données XML Google Earth en utilisant VB.NET, partie III

StackOverflow https://stackoverflow.com/questions/1493084

  •  18-09-2019
  •  | 
  •  

Question

J'ai ce que XML je suis en train de lire dans une hiérarchie d'objets:

<?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 désérialiser le XML dans mes objets:

Fonction publique partagée DeSerializeFromXMLString (ByVal TypeToDeserialize Comme 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

Le problème est lorsque je tente d'analyser le nœud addressdetails. Quelque chose au sujet des attributs ramone les choses et je ne sais pas comment le gérer. Si je supprime les informations d'attributs sur les nœuds addressdetails, le désérialisation fonctionne très bien, mais je ne l'ai pas cette option.

Vous remarquerez peut-être mon commentée pour tenter de gérer l'attribut de précision comme cela a été fait pour l'attribut ID précédemment sur le nœud Placemark.

Que dois-je faire pour obtenir pour travailler avec les informations d'attribut sur les nœuds de AddressDetail?

Était-ce utile?

La solution

Essayez ceci:

<XmlElement(elementName:="AddressDetails", Namespace:="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0")> Public Property AddressDetails() As AddressDetails
    Get
        Return _AddressDetails
    End Get
    Set(ByVal value As AddressDetails)
        _AddressDetails = value
    End Set
End Property



    <XmlAttributeAttribute("Accuracy")> Public Property Accuracy() As Integer
        Get
            Return _Accuracy
        End Get
        Set(ByVal value As Integer)
            _Accuracy = value
        End Set
    End Property
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top