使用 xmlstarlet 搜索 XPATH 并更新父元素

Use xmlstarlet to search for an XPATH and update a parent element

我是 xmlstarlet 的新手。我有以下 xml 文件(为清楚起见已删除部分内容),它实际上是来自 Google 我的地图的 KML 文件:

<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <Folder>
      <name>Property</name>
      <Placemark>
        <name>kml_1</name>
        <styleUrl>#poly-000000-1200-77</styleUrl>
        <ExtendedData>
          <Data name="housenumber">
            <value>222</value>
          </Data>
          <Data name="address">
            <value>222 MAIN STREET HAPPYTOWN</value>
          </Data>
        </ExtendedData>
      </Placemark>
    </Folder>
  </Document>
</kml>

我想使用 xmlstarlet 找到 "//_:kml/_:Document/_:Folder[_:name='Property']/_:Placemark/_:ExtendedData/_:Data/_:value='222 MAIN STREET HAPPYTOWN'",然后将 styleUrl 元素从 #poly-000000-1200-77 更新为 #poly-colour01

XML 文件包含多个 FolderPlacemark 元素,我需要具体说明我更新了哪一个。

这可能吗?提前致谢。

好吧,下面的内容会很长而且很复杂,主要是因为必须处理命名空间,但是请在您实际的 xml 上尝试一下,看看它是否有效:

xml  
ed  
-N x="http://www.opengis.net/kml/2.2" 
-u  '//x:Document/x:Folder[x:name="Property"]/x:Placemark[x:ExtendedData//x:Data[@name="address"]/x:value="222 MAIN STREET HAPPYTOWN"]/x:styleUrl'  
-v "#poly-colour01"  
file.xml