【问题标题】:KML Inserting a Specific Tag between Two Other Tags Based on a ConditionKML 根据条件在其他两个标签之间插入特定标签
【发布时间】:2016-07-30 14:03:51
【问题描述】:

TLDR - 仅当描述中提到短语“办公室”时,才在名称和描述标记之间插入样式标记及其内容(参见代码块),以便将当前的 Google 地球地标从默认的黄色更改为自定义一个...

嗨,伙计们,我在弄清楚这个问题时遇到了一些麻烦…… 使用 Notepadd++ 我正在编辑一个 Google 地球 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>

现在所有遵循该模式的地标都将具有与默认地标不同类型的地标(我将不再头疼)。

提前谢谢大家。

【问题讨论】:

    标签: regex notepad++ kml google-earth


    【解决方案1】:

    好吧,正则表达式实际上并不需要在行前匹配某些内容。
    它只需要在你的比赛之前加上一些带有线条的东西。
    所以这仍然是一件相当简单的事情。

    所以使用记事本++

    查找内容:(\s+)(&lt;description&gt;)(?=.*?the office.*?&lt;\/description&gt;)

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

    搜索模式:正则表达式

    请注意,描述标签之前的空格放在捕获组 1 中。
    这是一个技巧,可以让插入与标签具有相同的缩进。

    但你也可以只输入不带空格的标签。

    查找内容:(&lt;description&gt;)(?=.*?the office.*?&lt;\/description&gt;)

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

    然后使用“XML 工具”之类的插件“漂亮打印”您的 XML。

    【讨论】:

    • 哇,我刚刚做了你的第一个建议,到目前为止它就像一个魅力......非常感谢!现在我要分解你的建议并学习它哈哈!哇,现在我可以睡觉了!再次感谢 LukStorms
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多