删除KML文件中的特定标记

时间:2012-09-04 20:46:35

标签: list tags kml

我有一个KML文件,它是世界各地的坐标列表和其他一些属性。对于一个地方看起来像这样:

<Placemark>
<name>Albania - Durrës</name>
<open>0</open>
<visibility>1</visibility>
<description>(Spot ID: 275801) show <![CDATA[<a href="http://www.windguru.cz/int/index.php?go=1&vs=1&sc=275801">forecast</a>]]></description>
<styleUrl>#wgStyle001</styleUrl><Point>
<coordinates>19.489747,41.277806,0</coordinates>
</Point>
<LookAt><range>200000</range><longitude>19.489747</longitude><latitude>41.277806</latitude></LookAt>
</Placemark>

我想删除除地点名称之外的所有内容。所以在这种情况下,这意味着我想删除除

之外的所有内容
<name>Albania - Durrës</name>

问题是,这个KML文件包含1000多个这样的地方。显然手动执行此操作显然不是一个选项,那么如何删除列表中所有项目的名称标签以外的所有标签?我可以使用某种程序吗?

2 个答案:

答案 0 :(得分:1)

使用专门的命令行工具来理解XML文档。

其中一个工具是xmlstarlet,可用于Linux,Windows和Solaris的here

为了解决您的特定问题,我使用了xmlstarlet可执行文件xml.exe(在Windows上):

xml.exe sel -N ns=http://www.opengis.net/kml/2.2 -t -v /ns:kml/ns:Document/ns:Placemark/ns:name places.kml

这会产生此输出:

Albania - Durrës
Second Name
Third Name
...
Final Name

如果您可以保证<name>仅作为<Placemark>的孩子出现,则此缩写版本将产生相同的结果:

xml.exe sel -N ns=http://www.opengis.net/kml/2.2 -t -v //ns:name places.kml

(这是因为这个较短的版本会找到所有 <name> 元素,无论它们出现在文档中的什么位置。)

如果您真的想要XML文档,则需要进行一些后期处理。以下是完整XML文档的示例:

<?xml version='1.0' encoding='utf-8'?>
<items>
  <item>Albania - Durrës</item>
  <item>Second Name</item>
  <item>Third Name</item>
  <!-- ... -->
  <item>Final Name</item>
</items>

第一行是XML声明。它声明了Unicode编码utf-8。您需要包含此行,以便XML处理器识别您的文档包含Unicode字符。 (如都拉斯。)

更多:这是一个增强的'xmlstarlet'命令,它将生成上面的XML文档:

xml.exe sel -N ns=http://www.opengis.net/kml/2.2 -T -t -o "<?xml version='1.0' encoding='utf-8'?>" -n -t -v "'<items>'" -n -t -m //ns:Placemark -v "concat('<item>',ns:name,'</item>')" -n -t -o "</items>" -n places.kml

答案 1 :(得分:0)

如果您使用的是Linux或类似产品:

grep "<name>" your_file.kml > file_with_only_name_tags

在Windows上,请参阅What are good grep tools for Windows?