python删除xml某个节点_sed – 删除包含特定元素的XML节点

我想从包含元素< tessellate>的KML文件中删除所有地标.应完全删除以下块:

#m_ylw-pushpin330

1

0.0000000000000,0.0000000000000,0 0.0000000000000,0.0000000000000,0

我已经尝试了一些非贪婪的perl正则表达式,没有运气(很多东西与第一个< Placemark>一起删除):

sed -r ':a; N; $!ba; s/\n\t*//g' myplaces.kml |

perl -pe 's|.*?.*?||g'

我相信XML解析器是可行的方法,但我阅读了xmlstarlet的文档并且无处可去.所以xmlstarlet,python等中的任何解决方案也欢迎!

解决方法:

使用xmlstarlet:

xmlstarlet ed -d '//Placemark[.//tessellate]' < myplaces.kml

xmlstarlet ed -N 'ns=http://www.opengis.net/kml/2.2' -d '//ns:Placemark[.//ns:tessellate]'

使用perl,您需要整个处理文件(不是逐行处理)并将s标志添加到s ///.即便如此,即使是非贪婪的匹配,它仍将匹配第一个< Placemark>上一个< / Placemark>在下一个< tessellate>之后发生.所以你需要写它像:

perl -0777 -pe 's|(.*?)|

$1 =~ //?"":$1|gse'

标签:python,perl,xml,sed,regular-expression

来源: https://codeday.me/bug/20190812/1643474.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值