【发布时间】:2018-02-01 07:56:52
【问题描述】:
我有一个类似这样的“t.kml”文件:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<name>Test.kml</name>
<Folder>
<name>Test</name>
<open>1</open>
<Placemark>
<name>Placemark 1</name>
<LookAt>
<longitude>-150.7482419621821</longitude>
<latitude>72.7616508182995</latitude>
<altitude>0</altitude>
<heading>-13.26929942603143</heading>
<tilt>0</tilt>
<range>33665.16192218825</range>
<gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
</LookAt>
<styleUrl>#m_ylw-pushpin</styleUrl>
<Point>
<gx:drawOrder>1</gx:drawOrder>
<coordinates>-110.7484519621821,52.7616508182995,0</coordinates>
</Point>
</Placemark>
</Folder>
</Document>
</kml>
我有这个简单的 c# 代码,它只是打开并保存它(尽管它做了很多其他事情)。
DialogResult result = openFileDialog2.ShowDialog();
if (result == DialogResult.OK)
{
string fileName = openFileDialog2.FileName;
var xdoc = XDocument.Load(fileName, LoadOptions.None);
xdoc.Save("G:/Projects/t1.kml", SaveOptions.None);
}
问题是:
(1) 为什么没有以正确的格式显示?
(2) 为什么在每个节点前都加“kml:”前缀?如何删除/格式化它们?
我该如何解决这两个问题?
编辑: “正确的格式”是指正确的 xml 格式、颜色和其他格式,如第一张图片所示。
编辑 2: 我如何确保它在浏览器中运行时也显示展开/折叠图标和颜色。
【问题讨论】:
-
1. “正确的格式”是什么意思?
-
问题是您的 XML 具有相同命名空间的重复命名空间前缀:
xmlns="http://www.opengis.net/kml/2.2"和xmlns:kml="http://www.opengis.net/kml/2.2"。而且,事实证明,在编写XElement时,命名空间进入下推堆栈,因此 last 重复命名空间控制使用的命名空间前缀。这就是为什么到处都添加kml:前缀的原因。当然,两者都可以使用,并且 XML 在语义上是等效的 - 但只是看起来不同。 -
这在XDocument duplicate namespace with different Local Name中有解释——事实上我认为这是重复的。
-
感谢@dbc 的澄清。有没有一种简单的方法来显示/格式化它而不在任何地方添加前缀?
-
是的,消除重复的
xmlns:kml="http://www.opengis.net/kml/2.2"命名空间。请记住,无论前缀是否存在,这只是一个表面问题,因为默认命名空间与kml:命名空间相同。