Come posso ottenere un valore .InnerText di XElement in Linq to XML?
-
03-07-2019 - |
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?
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.