2008-09-30 2 views
3

Я пытаюсь извлечь полигоны из меток в файле KML. До сих пор так хорошо:Как получить значение XElement в .InnerText в Linq для 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 

Я хотел бы, чтобы захватить весь <polygon>...</polygon> блок в виде строки. Я пытался что-то вроде этого (где ... выше):

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

но объект XElement не имеет InnerText свойство, или какой-либо эквивалент, насколько я могу судить. Как захватить необработанный XML, который определяет XElement?

ответ

1

То, что я отсутствовал, что Placemark.<g:Polygon> представляет собой сборник XElements, ни один XElement. Это работает:

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 является эквивалентом InnerText как tbrownell предложил.

1

Вы пробовали:

Placemark.ToString() 
+0

Да, но это дает мне весь узел Placemark, тогда как я просто хочу Polygon. То, что мне не хватало, было то, что «Метка. `это коллекция XElements, а не один XElement. – 2008-09-30 15:17:50

0

Я также пропустил Перечисление. При использовании .Value можно получить нулевое исключение. Попробуйте equivelent этого вместо:

(string)Placemark.<g:name> 

К сожалению, не уверен, синтаксиса VB ,,, это было некоторое время, так как я закодированы в VB.

Смежные вопросы