如何编写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
相关产品推荐
相关产品推荐

