¿Cómo puedo obtener el valor .InnerText de XElement en Linq to XML?
-
03-07-2019 - |
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?
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.