c# - 使用 C# 和 Linq 动态生成 kml 文件

标签 c# asp.net xml linq kml

<分区>

Possible Duplicate:
How to set the default XML namespace for an XDocument

我正在尝试在 Asp.net C# 中编写一段代码,以便即时创建 KML 文件并将其存储在特定路径中。 当我想添加 kml 标签的 xmlns="http://earth.google.com/kml/2.2"属性时,代码会出错(见下文)。我尝试用另一个词(如“id”)替换 xmlns,它工作得很好。它与“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"));

它给出的运行时错误:

The prefix '' cannot be redefined from '' to 'http://earth.google.com/kml/2.2' within the same start element tag. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Xml.XmlException: The prefix '' cannot be redefined from '' to 'http://earth.google.com/kml/2.2' within the same start element tag.

我想创建的 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>

最佳答案

先定义命名空间

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")))))

);

关于c# - 使用 C# 和 Linq 动态生成 kml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12820775/

相关文章:

Python 中多变量迭代的 C# 模拟?

c# - Gridview 更新返回 null

Javascript + 从选择框中打印值

c# - 如何阻止某些 ip(用户)访问我的网站?

c# - 夏令时更改后的 DateTimeOffset 显示

c# - 如何确保文件路径有效?

c# - C#有私有(private)继承和保护继承的概念吗?

java - STAX 解析 - 移动 xml 文件

java - XML 架构以无序模式显示元素

python - 使用 XPATH 处理格式错误的 HTML 文件