2015-05-09 31 views
1

我正在嘗試使用xmlStarlet編輯XML文件,因此我必須指定要在XPath中刪除的元素,並且遇到XPath規範的問題。該XML文件將包含以下內容:如何在XPath中指定重複或相鄰的XML元素以在xmlStarlet中將其刪除?

<SoundStreamBlock> 
    <data>base64 characters</data> 
</SoundStreamBlock> 
<ShowFrame/> 

我有是,以前的一些缺失後,我留下了ShowFrame元素,一個又一個的2的問題,那就是,2個相鄰元素:

<SoundStreamBlock> 
    <data>base64 characters</data> 
</SoundStreamBlock> 
<ShowFrame/> 
<ShowFrame/> 

我想刪除重複的ShowFrame元素。使用xmlStarlet以下XPath規範不工作:

「/ SWF /頭/標籤/ ShowFrame /前:: ShowFrame」

編輯:我也試圖與前同輩

以上這刪除了ShowFrame元素的全部,除了最後一個。我只想刪除單個的重複的 ShowFrame元素,也就是說,只有在ShowFrame元素後面緊跟着一個ShowFrame元素時。

我需要添加到XPath規範來限制它爲相鄰元素嗎?

感謝,

-Andres

回答

1

你可以試試這個方法:

/swf/Header/tags/ShowFrame/preceding-sibling::*[1][self::ShowFrame] 

以上的XPath的最後一位得到第一前置兄弟元素(/preceding-sibling::*[1])並測試元素名稱是ShowFrame[self::ShowFrame])。