我正在尝试使用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
答案 0 :(得分:1)
您可以尝试这种方式:
/swf/Header/tags/ShowFrame/preceding-sibling::*[1][self::ShowFrame]
上述xpath的最后一位获取前一个兄弟元素(/preceding-sibling::*[1]
),并测试元素名称是否为ShowFrame
([self::ShowFrame]
)。