使用 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 文件包含多个 Folder
和 Placemark
元素,我需要具体说明我更新了哪一个。
这可能吗?提前致谢。
好吧,下面的内容会很长而且很复杂,主要是因为必须处理命名空间,但是请在您实际的 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
我是 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 文件包含多个 Folder
和 Placemark
元素,我需要具体说明我更新了哪一个。
这可能吗?提前致谢。
好吧,下面的内容会很长而且很复杂,主要是因为必须处理命名空间,但是请在您实际的 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