Как я могу получить значение .InnerText XElement в Linq to XML?

Я пытаюсь извлечь полигоны из меток в файле KML. Все идет нормально:

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?


person Herb Caudill    schedule 30.09.2008    source источник


Ответы (3)


Чего мне не хватало, так это того, что 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.

person Herb Caudill    schedule 30.09.2008

Ты пробовал:

Placemark.ToString()
person tbrownell    schedule 30.09.2008
comment
Да, но это дает мне весь узел Placemark, тогда как мне нужен только Polygon. Чего мне не хватало, так это того, что Placemark.<g:Polygon> — это набор XElements, а не отдельный XElement. - person Herb Caudill; 30.09.2008

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

(string)Placemark.<g:name>

Извините, я не уверен в синтаксисе VB, прошло некоторое время с тех пор, как я кодировал в VB.

person tbrownell    schedule 30.09.2008