首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linq to XML for KML?

Linq to XML for KML?
EN

Stack Overflow用户
提问于 2008-09-30 02:17:40
回答 5查看 5.7K关注 0票数 6

我是一名LINQ to XML新手,也是一名KML新手;所以请容忍我。

我的目标是从KML文件中提取单个Placemarks。我的KML是这样开始的:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="http://earth.google.com/kml/2.0">
  <name>Concessions</name>
  <visibility>1</visibility>
  <Folder>
    <visibility>1</visibility>
    <Placemark>
      <name>IN920211</name>
      <Style>
        <PolyStyle>
          <color>80000000</color>
        </PolyStyle>
      </Style>
      <Polygon>
        <altitudeMode>relativeToGround</altitudeMode>
        <outerBoundaryIs>
          <LinearRing>
            <coordinates>11.728374,1.976421,0 11.732967,1.965322,0 11.737225,1.953161,0 11.635858,1.940812,0 11.658102,1.976874,0 11.728374,1.976421,0 </coordinates>
          </LinearRing>
        </outerBoundaryIs>
      </Polygon>
    </Placemark>
    <Placemark>
    ...

这就是我所得到的:

代码语言:javascript
运行
复制
    Dim Kml As XDocument = XDocument.Load(Server.MapPath("../kmlimport/ga.kml"))
    Dim Placemarks = From Placemark In Kml.Descendants("Placemark") _
         Select Name = Placemark.Element("Name").Value

到目前为止,没有好的- Kml.Descendants("Placemark")给我一个空的枚举。文档被正确加载-因为KML.Descendants包含每个节点。值得注意的是,这些查询也是空的:

代码语言:javascript
运行
复制
Dim foo = Kml.Descendants("Document") 
Dim foo = Kml.Descendants("Folder") 

谁能给我指个方向?链接到好的Linq to XML教程的加分-我在网上找到的那些在非常简单的场景中停止。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-09-30 14:26:16

感谢spoon16和Bruce Murdock为我指明了正确的方向。spoon16发布的代码可以工作,但强制您将名称空间与每个元素名称连接在一起,这并不像我希望的那样简洁。

我已经做了更多的搜索,我已经弄明白了这应该是如何完成的-这非常简洁,并且我喜欢引用<...>元素的新的XML括号语法。

代码语言:javascript
运行
复制
Imports <xmlns:g='http://earth.google.com/kml/2.0'>
Imports System.Xml.Linq

 ...

    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

注意第一行中xmlns后面的:g。这为您提供了在其他地方引用此命名空间的快捷方式。

有关XNamespace类的更多信息,请参见MSDN documentation

票数 1
EN

Stack Overflow用户

发布于 2009-09-29 17:43:58

这适用于我在C#中的工作:

代码语言:javascript
运行
复制
XDocument doc = XDocument.Load(@"TheFile.kml");

var q = doc.Descendants().Where(x => x.Name.LocalName == "Placemark"); 
票数 6
EN

Stack Overflow用户

发布于 2008-10-21 20:39:30

Scott Hanselman为那些寻找基于C#的解决方案的人提供了一个简洁的解决方案。

XLINQ to XML support in VB9

此外,使用XNamespace很方便,而不仅仅是附加一个字符串。这更正式一点。

代码语言:javascript
运行
复制
// This code should get all Placemarks from a KML file            
var xdoc = XDocument.Parse(kmlContent);
XNamespace ns = XNamespace.Get("http://earth.google.com/kml/2.0");
var ele = xdoc.Element(ns + "kml").Element(ns + "Document").Elements(ns + "Placemark");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/151521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档