如何在XPath中指定重复或相邻的XML元素以在xmlStarlet中删除它?

时间:2015-05-09 12:16:47

标签: xml xpath

我正在尝试使用xmlStarlet编辑XML文件,因此我必须在XPath中指定要删除的元素,并且我遇到了XPath规范的问题。 XML文件将包含以下内容:

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

我遇到的问题是,在一些先前的删除之后,我留下了两个ShowFrame元素,一个接一个,即2个相邻的元素:

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

我想删除重复的ShowFrame元素。在xmlStarlet中使用以下XPath规范不起作用:

&#34; /瑞士法郎/页眉/标签/ ShowFrame /前述:: ShowFrame&#34;

编辑:我也尝试了上面的兄弟

这将删除除最后一个之外的所有 ShowFrame元素。我只想删除单个重复的 ShowFrame元素,也就是说,只有在ShowFrame元素后面紧跟ShowFrame元素时才会删除。

我需要在XPath规范中添加哪些内容来限制此相邻元素?

谢谢,

-Andres

1 个答案:

答案 0 :(得分:1)

您可以尝试这种方式:

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

上述xpath的最后一位获取前一个兄弟元素(/preceding-sibling::*[1]),并测试元素名称是否为ShowFrame[self::ShowFrame])。