我正在尝试在Asp.net C#中编写一段代码,以便即时创建KML文件并将其存储在特定路径中。 当我想添加xmlns =" http://earth.google.com/kml/2.2"时,代码会出错。 kml标签的属性(见下文)。我尝试用另一个单词替换xmlns,例如" id"它工作得很好。它与单词" xmlns"有关吗? ??!对我来说很奇怪。
如果你明白问题是什么,请给我一个解决方案......谢谢!
我的代码:
XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", ""),
new XComment("This is comment by me"),
new XElement("kml", new XAttribute("xmlns", "http://earth.google.com/kml/2.2"),
new XElement("Document",
new XElement("Name", "something"), new XElement("Placemark",
new XAttribute("id", "1"),
new XElement("title", "something"),
new XElement("description", "something"),
new XElement("LookAt",
new XElement("Longitude", "49.69"),
new XElement("Latitude", "32.345")), new XElement("Point", new XElement("Coordinates", "49.69,32.345,0"))))));
doc.Save(Server.MapPath(@"~\App_Data\markers.xml"));
它给出的运行时错误:
前缀''不能从''重新定义至 ' http://earth.google.com/kml/2.2'在同一个开始元素标记内。 描述:执行期间发生未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.Xml.XmlException:前缀''不可能是 从''重新定义到' http://earth.google.com/kml/2.2'在同一个 开始元素标记。
我想要创建的kml文件:
<?xml version="1.0" encoding="utf-8"?>
<!--This is comment by me-->
<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
<Name>something</Name>
<Placemark id="1">
<title>something</title>
<description>something</description>
<LookAt>
<Longitude>49.69</Longitude>
<Latitude>32.345</Latitude>
</LookAt>
<Point>
<Coordinates>49.69,32.345,0</Coordinates>
</Point>
</Placemark>
</Document>
</kml>
答案 0 :(得分:2)
首先定义名称空间
XNamespace n = "http://earth.google.com/kml/2.2";
new XElement(n+"kml")//just do n+ for each underlying elements
你的XML结构也是错误的,应该是
XNamespace n = "http://earth.google.com/kml/2.2";
XDocument doc = new XDocument(
new XDeclaration("1.0", "utf-8", ""),
new XComment("This is comment by me"),
new XElement(n+"kml",
new XElement(n+"Document",
new XElement(n+"Name", "something"), new XElement(n+"Placemark",
new XAttribute("id", "1"),
new XElement(n+"title", "something"),
new XElement(n+"description", "something"),
new XElement(n+"LookAt",
new XElement(n+"Longitude", "49.69"),
new XElement(n+"Latitude", "32.345")), new XElement(n+"Point", new XElement(n+"Coordinates", "49.69,32.345,0")))))
);