You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写xmlstarlet命令的XML/XPath表达式以将指定Placemark元素移至同Folder下首位

使用xmlstarlet移动KML中的Placemark元素

针对你的需求——把KML里名为"Risk_2000"的Placemark移到同文件夹下"Asset_4000"的前面,用纯xmlstarlet命令行实现,你只需要在已写的命令后半部分补充--before参数和目标节点的XPath即可,完整命令如下:

xmlstarlet edit --move "//_:kml/_:Document/_:Folder[_:name='Assets and Risks']/_:Placemark[_:name='Risk_2000']" --before "//_:kml/_:Document/_:Folder[_:name='Assets and Risks']/_:Placemark[_:name='Asset_4000']" your_input_file.kml

关键细节说明:

  • _:命名空间前缀:你的KML文件带有xmlns="http://www.opengis.net/kml/2.2"命名空间,用_:可以匹配任意命名空间下的元素,避免XPath因为命名空间不匹配找不到节点的问题。
  • --before定位参数:xmlstarlet的edit模式中,--move命令可以配合--before/--after/--first/--last来指定移动后的位置,这里--before就是把源节点插入到目标节点的正前方,完美符合你的需求。
  • 直接修改原文件:如果不想输出到控制台,而是直接修改输入文件,加上--inplace参数即可:
    xmlstarlet edit --inplace --move "//_:kml/_:Document/_:Folder[_:name='Assets and Risks']/_:Placemark[_:name='Risk_2000']" --before "//_:kml/_:Document/_:Folder[_:name='Assets and Risks']/_:Placemark[_:name='Asset_4000']" your_input_file.kml
    

执行后效果:

原KML中"Assets and Risks"文件夹下的Placemark顺序会变为:

<Placemark>
  <name>Risk_2000</name>
  <description>Address: 32</description>
  <Point>
    <coordinates>xxx.xxx,yyy.yyy,0</coordinates>
  </Point>
</Placemark>
<Placemark>
  <name>Asset_4000</name>
  <description>Address: 2286</description>
  <Point>
    <coordinates>xxx.xxx,yyy.yyy,0</coordinates>
  </Point>
</Placemark>

内容的提问来源于stack exchange,提问作者owl770

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:07:35