2015-05-09 87 views
0

我想使用xmlStarlet刪除XML文件中的特定元素,並且遇到XPath規範的問題。這是節點/元素,我需要刪除,即指定的XPath:如何在XPath中定義特定的XML元素以用xmlStarlet刪除?

<ShowFrame/> 
     <DoAction> 
     <actions> 
      <Stop/> 
      <EndAction/> 
     </actions> 
     </DoAction> 
    <ShowFrame/> 

的問題是,有與行動的孩子,我不希望刪除其他DoAction元素。只有具有這兩個孩子的兒童動作的DoAction元素:Stop和EndAction。我不想刪除的DoAction元素在操作子項中有不同的子元素。

當我使用刪除xmlStarlet命令這個XPath規範僅停止後裔被刪除:

「/ SWF /頭/標籤/ DoAction /後裔::動作/後裔::停止」

但我想刪除完整的DoAction元素。實際上,我真的需要在DoAction元素後面刪除ShowFrame元素,以便在刪除後沒有剩餘兩個相鄰的ShowFrame元素。

我一直在研究XPath規範,但我不明白。我找到的例子使用屬性,但是這個XML文件中沒有屬性。

任何幫助,這將不勝感激。

感謝,

-Andres

回答

1

你可以試試這個方法:

/swf/Header/tags/DoAction[actions[Stop and EndAction]] 

以上的XPath選擇與孩子actionsDoAction元素包含StopEndAction孩子。

+1

謝謝har07。那就做到了! –

0

這看起來像它應該工作

//DoAction[*/EndAction or */Stop] 
相關問題