大约9个月前,我在C#中创建了一组与KML 2.2元素相对应的类。所以你可以做像myPlacemark = new Placemark(“name”);在内部,它使用XmlDocument,XmlElement等来创建各种节点和标记。这是一只记忆猪,可能会更快。不,我没有使用XSD生成类。
我看到有关于使用Linq读取和解析KML的帖子。但是,是否有人使用Linq to XML来创建KML?如果没有,您认为创建程序的最佳方法是什么?易于使用的类集来抽象KML?使用Linq to XML可以提高性能吗?
答案 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的对象模型,就像上面的示例一样,它应该是一个简单的实现。