Pergunta

Eu estou tentando extrair os polígonos de marcadores em um arquivo KML. Até aí tudo bem:

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

Eu gostaria de capturar todo o bloco <polygon>...</polygon> como uma string. Eu tentei algo assim (onde o ... é acima):

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

mas o objeto XElement não tem uma propriedade InnerText, ou algum equivalente, tanto quanto eu posso dizer. Como faço para pegar o XML bruto que define um XElement?

Foi útil?

Solução

O que estava faltando era que Placemark.<g:Polygon> é uma coleção de XElements, nem um único XElement. Isso 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 é o equivalente a InnerText, como tbrownell sugeriu.

Outras dicas

Você tentou:

Placemark.ToString()

Eu perdi a enumeração também. Ao usar .Value é possível receber uma exceção nula. Experimente o equivelent desta vez:

(string)Placemark.<g:name>

Infelizmente não tenho certeza da sintaxe VB ,,, tem sido um tempo desde que eu codificado em VB.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top