2017-09-19 72 views
2

如果在任何標記中找到epm_default_cloud_admin,我需要刪除下面的整個單元格註釋元素,用xmlstarlet嘗試了不同的東西,它贏了;不會發生,你能幫忙嗎?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

起初,應對有效的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> 
+0

@ darknight1906,歡迎您 – RomanPerekhrest

+0

@ darknight1906 - 你也密切與您的第二次嘗試:'xmlstarlet版-d 「/ cell/cellNote [author ='epm_default_cloud_admin']」' –

+1

@DanielHaley,他很接近,但條件是*如果在任何**標籤中找到epm_default_cloud_admin * – RomanPerekhrest