使用Linq to XML创建KML

时间:2009-02-24 14:06:35

标签: c# linq kml

大约9个月前,我在C#中创建了一组与KML 2.2元素相对应的类。所以你可以做像myPlacemark = new Placemark(“name”);在内部,它使用XmlDocument,XmlElement等来创建各种节点和标记。这是一只记忆猪,可能会更快。不,我没有使用XSD生成类。

我看到有关于使用Linq读取和解析KML的帖子。但是,是否有人使用Linq to XML来创建KML?如果没有,您认为创建程序的最佳方法是什么?易于使用的类集来抽象KML?使用Linq to XML可以提高性能吗?

2 个答案:

答案 0 :(得分:0)

不是KML,但这是使用System.Xml.Serialization

的示例

鉴于这两个类(具有属性)和初始化:

[XmlRoot("BookList")]
public class BookList
{
    [XmlElement("BookData")]
    public List<Book> Books = new List<Book>();
}

public class Book
{
    [XmlElement("Title")]
    public string Title { get; set; }
    [XmlAttribute("isbn")]
    public string ISBN { get; set; }
}

var bookList = new BookList
{
    Books = { new Book { Title = "Once in a lifetime", ISBN = "135468" } }
};

您可以像这样序列化为xml:

var serializer = new XmlSerializer(typeof(BookList));
using (var writer = new StreamWriter("YourFileNameHere")) 
{
    serializer.Serialize(writer, bookList); 
}

等效的Linq to Xml看起来像这样(未经测试)

XElement bookXML = 
    new XElement("BookList", 
        from book in bookList.Books
        select new XElement("BookData",
            new XElement("Title", book.Title),
            new XAttribute("isbn", book.ISBN)
        )
    );

结论,两者都比使用XmlDocument更简洁,XmlSerializer更短,Linq to XML为您提供了更大的灵活性(就您的类结构与xml结构的不同程度而言,XmlSerializer非常“严格”)。

答案 1 :(得分:-1)

我没有使用过KML,但是Linq to XML库本质上是System.Xml中XmlDocument,XmlElement等模型的替代品。从记忆的角度来看,我不知道它们是否比你目前的解决方案更好。

我经常使用的一种方法是创建一组表示Xml文档的数据类,然后使用XmlSerializer将对象转换为Xml。我相当这个实现并不是一个伟大的记忆力,我认为,为了你的目的,这可能是有道理的。

这是一个简单的例子。说我要创建以下Xml:

<Packages>
  <Package Name="A">

  </Package>
  <Package Name="B">
      <Dependencies>
          <Dependency Package="C" />
          <Dependency Package="A" />
      </Dependencies>
  </Package>
  <Package Name="C">
      <Dependencies>
          <Dependency Package="A" />
      </Dependencies>
  </Package>
</Packages >

您可以创建以下类:

class Package 
{
    private List<Dependency> dependencies = new List<Dependency>();
    public string Name { get; set; }
    public List<Dependency> Dependencies { get { return dependencies; } set { dependencies = value; } }
}

class Dependency
{
    public string Package { get; set; }
}

使用System.Xml.Serialization.XmlSerializer类,您可以将List转换为上面的Xml。

因此,如果您为KML创建一个易于映射到实际KML的对象模型,就像上面的示例一样,它应该是一个简单的实现。