如何在XPath中定义要使用xmlStarlet删除的特定XML元素?

时间:2015-05-09 04:09:50

标签: xml xpath

我正在尝试使用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

2 个答案:

答案 0 :(得分:1)

您可以尝试这种方式:

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

在xpath上方选择DoAction元素与子actions包含StopEndAction个孩子。

答案 1 :(得分:0)

这看起来应该可行

//DoAction[*/EndAction or */Stop]