【问题标题】:How to specify a duplicate or adjacent XML element in XPath to delete it in xmlStarlet?如何在 XPath 中指定重复或相邻的 XML 元素以在 xmlStarlet 中将其删除?
【发布时间】:2015-05-09 12:16:46
【问题描述】:

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

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

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

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

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

"/swf/Header/tags/ShowFrame/preceding::ShowFrame"

编辑:我也尝试过使用前面的兄弟姐妹

这将删除除最后一个之外的 所有 ShowFrame 元素。我只想删除单个 duplicate ShowFrame 元素,即仅当 ShowFrame 元素紧跟 ShowFrame 元素时。

我需要在 XPath 规范中添加什么来限制这个相邻元素?

谢谢,

-安德烈斯

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

    你可以试试这个方法:

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

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

    【讨论】:

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