2008-09-30 7 views
3

J'essaie d'extraire les polygones des repères dans un fichier KML. Jusqu'à présent, si bien:Comment puis-je obtenir la valeur .InnerText de XElement dans Linq to XML?

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 

Je voudrais saisir l'ensemble <polygon>...</polygon> bloc comme une chaîne. J'ai essayé quelque chose comme ça (où ... est au-dessus):

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

mais l'objet XElement ne dispose pas d'une propriété InnerText, ou tout équivalent pour autant que je peux dire. Comment puis-je récupérer le XML brut qui définit un XElement?

Répondre

1

Ce que je ne manquait que Placemark.<g:Polygon> est une collection de XElements, pas un seul XElement. Cela fonctionne:

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 est l'équivalent de InnerText, comme tbrownell suggéré.

1

Avez-vous essayé:

Placemark.ToString() 
+0

Oui, mais cela me donne tout le nœud Placemark, alors que je veux juste le polygone. Ce qui me manquait était ce 'Placemark. 'est une collection de XElements, pas un seul XElement. –

0

J'ai également manqué l'énumération. Lors de l'utilisation de .Value, il est possible de recevoir une exception null. Essayez le equivelent de cette place:

(string)Placemark.<g:name> 

Désolé pas sûr de la syntaxe VB ,,, il a été un moment que je l'ai codé en VB.