【问题标题】:how to define specific XML element in XPath to delete with xmlStarlet?如何在 XPath 中定义特定的 XML 元素以使用 xmlStarlet 删除?
【发布时间】:2015-05-09 04:09:50
【问题描述】:

我正在尝试使用 xmlStarlet 删除 XML 文件中的特定元素,但我遇到了 XPath 规范的问题。这是我需要删除的节点/元素,即在 XPath 中指定:

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

问题在于,还有其他 DoAction 元素带有我不想删除的子动作。只有具有子动作的 DoAction 元素具有这两个子动作:Stop 和 EndAction。我不想删除的 DoAction 元素在 actions 子项中有不同的子项。

当我在删除 xmlStarlet 命令中使用此 XPath 规范时,仅删除了 Stop 后代:

"/swf/Header/tags/DoAction/descendant::actions/descendant::Stop"

但我想删除完整的 DoAction 元素。实际上,我真的需要删除 DoAction 元素之后的 ShowFrame 元素,这样删除后就不会剩下 2 个相邻的 ShowFrame 元素了。

我一直在尝试研究 XPath 规范,但我不明白。我找到的示例使用属性,但此 XML 文件中没有属性。

对此的任何帮助将不胜感激。

谢谢,

-安德烈斯

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

    你可以试试这个方法:

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

    在 xpath 上方选择带有子 actionsDoAction 元素同时包含 StopEndAction 子元素。

    【讨论】:

      【解决方案2】:

      这看起来应该可以工作

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-12
        相关资源
        最近更新 更多