Wie kann ich einen .InnerText Wert XElement in Linq to XML?
-
03-07-2019 - |
Frage
Ich versuche, die Polygone von Ortsmarken in einer KML-Datei zu extrahieren. So weit so gut:
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
Ich möchte den gesamten <polygon>...</polygon>
Block als String erfassen. Ich habe versucht, so etwas wie diese (wo das ... ist oben):
Dim Polygon as String = Placemark.<g:Polygon>.InnerText
aber das XElement-Objekt nicht über eine Eigenschaft Innertext oder ein gleichwertiges, soweit ich das beurteilen kann. Wie packe ich den rohen XML, die eine XElement definiert?
Lösung
Was ich fehlte, war, dass Placemark.<g:Polygon>
eine Sammlung von XElements ist kein einziger XElement. Dies funktioniert:
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 ist das Äquivalent von Innertext, wie tbrownell vorgeschlagen.
Andere Tipps
Haben Sie versucht:
Placemark.ToString()
Ich vermisste auch die Aufzählung. Wenn .Wert verwendet, ist es möglich, eine Null-Ausnahme zu erhalten. Versuchen Sie, die equivelent dieser Stelle:
(string)Placemark.<g:name>
Es tut uns Leid der VB-Syntax nicht sicher ,,, es ist schon eine Weile, da ich in VB codiert haben.