使用Linq to XML创建KML

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

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

不是KML,但这是使用System.Xml.Serialization的一个例子

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

[XmlRoot("BookList")] public class BookList { [XmlElement("BookData")] public List Books = new List(); } 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到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非常“严格”)。

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

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

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

                

您可以创建以下类:

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

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

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