KML根据条件在两个其他标签之间插入特定标签

时间:2016-07-30 14:03:51

标签: regex notepad++ kml google-earth

TLDR - 只有在描述提到短语“办公室”时才在名称和说明标签之间插入Style标签及其内容(请参阅代码块),以便将当前Google Earth地标从默认黄色地标更改为定制的...

大家好,我在解决这个问题上遇到了一些麻烦...... 使用Notepadd ++我正在编辑一个Google Earth kml文件,其中有许多符合此XML模式的地标:

<Placemark>
      <name>Jim</name>
      <description>Jim goes to the office every day</description>
      <TimeSpan>
        <begin>2016-06-20T12:00:00Z</begin>
        <end>2016-06-25T12:00:00Z</end>
      </TimeSpan>
      <Point>
        <coordinates>123412341234,123412341234,1</coordinates>
      </Point>
        </Placemark>

我想找到“办公室”这个短语的每个实例。如果找到该文本,则以Google地球可读的方式在名称和描述之间插入以下代码。

<Style id="customstyle">
        <IconStyle>
            <color>a1ff00ff</color>
            <scale>1.5</scale>
            <Icon>
                <href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href>
            </Icon>
        </IconStyle>
            </Style>

执行此操作会将地标从默认地标更改为自定义地标。

到目前为止我找到的所有教程都是关于如何使用Notepad ++正则表达式在行的开头或结尾添加单词或短语的说明,或者指示说明如何使用\ n在下一行插入文本。 但是,我认为我的情况是独特的,因为基于某个标准,我想在文本上方插入我的文本。 (更具体地说,在名称和描述标签之间插入我的文字)

最终结果看起来像这样(注意我想要添加的文本现在位于名称标签和描述标签之间)

<Placemark>
      <name>Jim</name>
      <Style id="customstyle">
        <IconStyle>
            <color>a1ff00ff</color>
            <scale>1.5</scale>
            <Icon>
                <href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href>
            </Icon>
        </IconStyle>
        </Style>
      <description>Jim goes to the office every day</description>
      <TimeSpan>
        <begin>2016-06-15T12:00:00Z</begin>
        <end>2016-06-20T12:00:00Z</end>
      </TimeSpan>
      <Point>
        <coordinates>2135125,1234523451,12341234</coordinates>
      </Point>
    </Placemark>

现在,遵循该模式的所有地标都会有一个与默认地标不同的地标类型(我不再感到头痛)。

先谢谢所有人。

1 个答案:

答案 0 :(得分:0)

嗯,正则表达式并不需要在线之前匹配一些东西 它只需要在比赛前用线条放一些东西 所以它仍然是一件相当简单的事情。

所以使用Notepad ++

查找内容:(\s+)(<description>)(?=.*?the office.*?<\/description>)

替换为:$1<Style id="customstyle">$1\t<IconStyle>$1\t\t<color>a1ff00ff</color>$1\t\t<scale>1.5</scale>$1\t\t<Icon>$1\t\t\t<href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href>$1\t\t</Icon>$1\t</IconStyle>$1</Style>$1$2

搜索模式:正则表达式

请注意,description标记之前的空格放在捕获组1中 这是一个技巧,使插入与标记具有相同的缩进。

但你也可以放入没有空格的标签。

查找内容:(<description>)(?=.*?the office.*?<\/description>)

替换为:<Style id="customstyle"><IconStyle><color>a1ff00ff</color><scale>1.5</scale><Icon><href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href></Icon></IconStyle></Style>$1

然后使用像&#34; XML Tools&#34;这样的插件。到&#34;漂亮的打印&#34;你的XML。