我正在尝试使用xmlStarlet删除XML文件中的特定元素,并且我遇到了XPath规范的问题。这是我需要删除的节点/元素,即在XPath中指定:
<ShowFrame/>
<DoAction>
<actions>
<Stop/>
<EndAction/>
</actions>
</DoAction>
<ShowFrame/>
问题是还有其他DoAction元素和一个我不想删除的动作子元素。只有具有子动作的DoAction元素具有这两个子节点:Stop和EndAction。我不想删除的DoAction元素在actions子项中有不同的子项。
当我在delete xmlStarlet命令中使用此XPath规范时,仅删除Stop后代:
&#34; /瑞士法郎/页眉/标签/ DoAction /后代::动作/后代::停止&#34;
但我想删除完整的DoAction元素。实际上,我还需要删除DoAction元素后面的ShowFrame元素,这样删除后就不会有2个相邻的ShowFrame元素。
我一直在尝试研究XPath规范但我不理解它。我找到的示例使用属性,但此XML文件中没有属性。
对此的任何帮助将不胜感激。
谢谢,
-Andres
答案 0 :(得分:1)
您可以尝试这种方式:
/swf/Header/tags/DoAction[actions[Stop and EndAction]]
在xpath上方选择DoAction
元素与子actions
包含Stop
和EndAction
个孩子。
答案 1 :(得分:0)
这看起来应该可行
//DoAction[*/EndAction or */Stop]