如何在Linq to XML中获取XElement的.InnerText值?

3

我正在尝试从KML文件中提取placemarks中的多边形。目前为止还不错:

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属性,据我所知也没有任何等价的属性。那么如何获取定义XElement的原始XML呢?
3个回答

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()

是的,但这会给我整个Placemark节点,而我只想要多边形。我缺少的是Placemark.<g:Polygon>是XElement的集合,而不是单个XElement。 - Herb Caudill

0

我也错过了枚举。当使用.Value时,可能会收到空异常。请尝试使用以下等效代码:

(string)Placemark.<g:name>

抱歉,我不确定VB语法,因为我已经有一段时间没有编写VB代码了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接