防止不必要的名称空间转换为xml

问题描述:

我正在通过在kml中的特定位置上添加gps坐标来处理修改kml文件的项目。但是,我的代码在其末尾保存的元素的ALL上添加了“gx”命名空间。我研究并研究了大量不同的Visual Basic XML编写方法,并且我已经用尽了想法。如何阻止不必要的名称空间被添加?防止不必要的名称空间转换为xml

test.kml:

代码
<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.opengis.net/kml/2.2"> 
    <Document> 
    <name>test.kml</name> 
    <Snippet>File Created Mon Jul 9 15:50:16 2012</Snippet> 
    <Style id="multiTrack_n"> 
     <IconStyle> 
     <Icon> 
      <href>http://maps.google.com/mapfiles/kml/shapes/track.png</href> 
     </Icon> 
     </IconStyle> 
     <LineStyle> 
     <color>99ffac59</color> 
     <width>6</width> 
     </LineStyle> 
    </Style> 
    <Folder> 
     <Placemark> 
     <name>test.kml</name> 
     <styleUrl>#multiTrack_n</styleUrl> 
     <gx:Track> 
      <!--GPS Tracking data Points--> 
     </gx:Track> 
     </Placemark> 
    </Folder> 
    </Document> 
</kml> 

Imports System.IO 
Imports System.Xml 
Imports System.DateTime 
Imports <xmlns="http://www.opengis.net/kml/2.2"> 
Imports <xmlns:gx="http://www.opengis.net/kml/2.2"> 
... 
Public Sub addCoordinate(ByVal lon As Double, ByVal lat As Double, ByVal att As Double, ByVal timeStamp As String) 
     Dim currentDoc = XDocument.Load("test.kml") 
     Try 
      whenElement = _ 
       <when><%= timeStamp %></when> 
      coordElement = _ 
       <gx:coord><%= lon.ToString %>,<%= lat.ToString %>,<%= att.ToString %></gx:coord> 
      Dim testLocation = currentDoc.<kml>.<Document>.<Folder>.<Placemark>.Elements.Last() 
      testLocation.Add(whenElement) 
      testlocation.Add(coordElement) 
      currentDoc.Save("test.kml") 
     Catch ex As Exception 
      Console.WriteLine(ex) 
     End Try 
    End Sub 

代码之后:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<gx:kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.opengis.net/kml/2.2"> 
    <gx:Document> 
    <gx:name>test.kml</gx:name> 
    <gx:Snippet>File Created Mon Jul 9 16:40:11 2012</gx:Snippet> 
    <gx:Style id="multiTrack_n"> 
     <gx:IconStyle> 
     <gx:Icon> 
      <gx:href>http://maps.google.com/mapfiles/kml/shapes/track.png</gx:href> 
     </gx:Icon> 
     </gx:IconStyle> 
     <gx:LineStyle> 
     <gx:color>99ffac59</gx:color> 
     <gx:width>6</gx:width> 
     </gx:LineStyle> 
    </gx:Style> 
    <gx:Folder> 
     <gx:name>test.kml</gx:name> 
     <gx:Placemark> 
     <gx:name>test</gx:name> 
     <gx:styleUrl>#multiTrack_n</gx:styleUrl> 
     <gx:Track> 
      <!--GPS Tracking data Points--> 
      <when xmlns="http://www.opengis.net/kml/2.2">2012-07-09T08:40:29Z</when> 
      <gx:coord xmlns:gx="http://www.opengis.net/kml/2.2">0,0,0</gx:coord> 
      <when xmlns="http://www.opengis.net/kml/2.2">2012-07-09T08:40:33Z</when> 
      <gx:coord xmlns:gx="http://www.opengis.net/kml/2.2">0,0,0</gx:coord> 
      <when xmlns="http://www.opengis.net/kml/2.2">2012-07-09T08:40:41Z</when> 
      <gx:coord xmlns:gx="http://www.opengis.net/kml/2.2">0,0,0</gx:coord> 
     </gx:Track> 
     </gx:Placemark> 
    </gx:Folder> 
    </gx:Document> 
</gx:kml> 
+1

你为什么声明同一个命名空间两次(一次为默认值,一旦与'gx'前缀)? – 2012-07-09 21:24:22

+0

好问题。此KML用于Google地球绘图,并且使用的示例具有两个名称空间(默认和gx)。如果我把它们中的一个(特别是默认)没有任何作用。 = [ – Ken 2012-07-10 11:31:54

+0

如果您的所有元素都在http://www.opengis.net/kml/2.2中,那么明确显示而不是默认显示的问题是什么 - XML是等同的,任何符合的解析器都应该正确处理它 – Mark 2012-07-10 14:09:36

实现什么样的评论说后,我意识到,如果我有默认NS在XML中作为http://www.opengis.net/kml/2.2,假定每个元素都有它,所以当我重新保存时,它将应用命名空间。

东西这么小而简单的...我傻......学到东西每天