【问题标题】:How can I get an XElement's .InnerText value in Linq to XML?如何在 Linq to XML 中获取 XElement 的 .InnerText 值?
【发布时间】:2008-09-30 14:54:57
【问题描述】:

我正在尝试从 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

我想将整个 &lt;polygon&gt;...&lt;/polygon&gt; 块捕获为字符串。我尝试过这样的事情(上面的 ... ):

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

但据我所知,XElement 对象没有 InnerText 属性或任何等效属性。如何获取定义 XElement 的原始 XML?

【问题讨论】:

    标签: vb.net linq linq-to-xml kml


    【解决方案1】:

    我缺少的是 Placemark.&lt;g:Polygon&gt; 是 XElement 的集合,而不是单个 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 所建议的那样。

    【讨论】:

      【解决方案2】:

      你试过了吗:

      Placemark.ToString()
      

      【讨论】:

      • 是的,但这给了我整个 Placemark 节点,而我只想要多边形。我缺少的是 Placemark.&lt;g:Polygon&gt; 是 XElements 的集合,而不是单个 XElement。
      【解决方案3】:

      我也错过了枚举。使用 .Value 时,可能会收到空异常。试试这个的等价物:

      (string)Placemark.<g:name>
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多