如果找到字符串,则xmlstarlet删除元素

时间:2017-09-19 07:06:34

标签: xmlstarlet

如果在任何标签中找到epm_default_cloud_admin,我需要删除下面的整个cellNote元素,尝试使用xmlstarlet进行不同的操作并获胜;是否会发生,你能帮忙吗?

<cell>
<cellNote>
 <DIM1>Actual</DIM1>
 <author>epm_default_cloud_admin</author>
 <modified>2016-11-16 08:28:38.0</modified>
 <title></title>
</cellNote>
<cellNote>
 <DIM1>Actual</DIM1>
 <contents>Variance in meals is due to Annual Sales Conference</contents>
 <author>Frank</author>
 <modified>2016-12-23 20:10:13.0</modified>
 <title></title>
</cellNote>
<cell>
我在下面尝试过的一些事情:

xmlstarlet ed -a "/cell/cellNote" --type elem -n string -v "epm_default_cloud_admin"
xmlstarlet ed -d '/cell/cellNote/author[. = 'epm_default_cloud_admin']' 

1 个答案:

答案 0 :(得分:3)

首先,要处理有效的xml,请确保cell标记包含开始和结束标记(您的输入同时包含开放<cell>)。

xmlstarlet 解决方案:

xmlstarlet ed -d "//cellNote[*[contains(text(),'epm_default_cloud_admin')]]" input.xml

输出:

<?xml version="1.0"?>
<cell>
  <cellNote>
    <DIM1>Actual</DIM1>
    <contents>Variance in meals is due to Annual Sales Conference</contents>
    <author>Frank</author>
    <modified>2016-12-23 20:10:13.0</modified>
    <title/>
  </cellNote>
</cell>