Domanda

Sto cercando di estrarre i poligoni dai segnaposto in un file KML. Fin qui tutto bene:

Imports <xmlns:g='http://earth.google.com/kml/2.0'>
Imports System.Xml.Linq

Partial Class Test_ImportPolygons
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim Kml As XDocument = XDocument.Load(Server.MapPath("../kmlimport/ga.kml"))
        For Each Placemark As XElement In Kml.<g:Document>.<g:Folder>.<g:Placemark>
            Dim Name As String = Placemark.<g:name>.Value
            ...
        Next
    End Sub

End Class

Vorrei catturare l'intero blocco <polygon>...</polygon> come stringa. Ho provato qualcosa del genere (dove il ... è sopra):

        Dim Polygon as String = Placemark.<g:Polygon>.InnerText

ma l'oggetto XElement non ha una proprietà InnerText, né alcun equivalente per quanto ne so. Come afferro l'XML grezzo che definisce un XElement?

È stato utile?

Soluzione

Quello che mi mancava era che Placemark.<g:Polygon> è una raccolta di XElement, non un singolo XElement. Questo funziona:

    For Each Placemark As XElement In Kml.<g:Document>.<g:Folder>.<g:Placemark>
        Dim Name As String = Placemark.<g:name>.Value
        Dim PolygonsXml As String = ""
        For Each Polygon As XElement In Placemark.<g:Polygon>
            PolygonsXml &= Polygon.ToString
        Next
    Next

XElement.ToString è l'equivalente di InnerText, come suggerito da Tbrownell.

Altri suggerimenti

Hai provato:

Placemark.ToString()

Ho perso anche l'Enumerazione. Quando si utilizza .Value è possibile ricevere un'eccezione nulla. Prova invece l'equivalente di questo:

(string)Placemark.<g:name>

Mi dispiace non sono sicuro della sintassi di VB ,,, è passato un po 'di tempo da quando ho codificato in VB.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top