Pregunta

Estoy tratando de extraer los polígonos de las marcas de posición en un archivo KML. Hasta ahora todo bien:

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

Me gustaría capturar todo el bloque <polygon>...</polygon> como una cadena. Intenté algo como esto (donde el ... está arriba):

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

pero el objeto XElement no tiene una propiedad InnerText, o cualquier equivalente por lo que puedo decir. ¿Cómo tomo el XML sin procesar que define un XElement?

¿Fue útil?

Solución

Lo que me faltaba era que Placemark.<g:Polygon> es una colección de XElements, no un solo XElement. Esto funciona:

    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 es el equivalente de InnerText, como sugirió tbrownell.

Otros consejos

¿Has probado:

Placemark.ToString()

También me perdí la enumeración. Al usar .Value es posible recibir una excepción nula. Pruebe el equivalente de esto en su lugar:

(string)Placemark.<g:name>

Lo siento, no estoy seguro de la sintaxis de VB ,,, ha pasado un tiempo desde que codifiqué en VB.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top