如何用xmlstarlet提取XML中caption元素的前两词及剩余内容?
使用xmlstarlet提取XML中元素的前两个词及剩余内容
需求与示例
给定XML文件内容:
<fig> <caption>Figure 1: Testing the figure</caption> </fig>
需要实现两个提取需求:
- 提取
<caption>元素中的前两个词(示例中为Figure 1:) - 提取该元素中的剩余内容(示例中为
Testing the figure)
期望输出:
Figure 1: Testing the figure
问题分析
你之前使用的xmlstarlet ed命令是用于编辑XML结构的,而需求是提取内容,应该使用xmlstarlet sel(选择提取)命令,同时原XPath的逻辑也存在问题。
解决方案
单命令实现期望输出
执行以下命令即可直接输出符合要求的结果:
xmlstarlet sel -t \ -v "substring(//caption, 1, string-length(substring-before(substring-after(//caption, ' '), ' ')) + string-length(substring-before(//caption, ' ')) + 2)" \ -n -n \ -v "substring-after(substring-after(//caption, ' '), ' ')" \ input.xml
命令拆解说明
提取前两个词:
XPath逻辑:先通过substring-before(//caption, ' ')获取第一个词Figure,再通过substring-after(//caption, ' ')得到1: Testing the figure,接着用substring-before获取第二个词1:,最后计算总长度并截取开头到第二个词后的位置,得到Figure 1:。提取剩余内容:
通过两次substring-after跳过前两个词和中间的空格,直接获取剩余部分Testing the figure。格式控制:
-n参数用于添加换行符,实现空行分隔效果。
内容的提问来源于stack exchange,提问作者Ofuuzo
相关产品推荐
相关产品推荐

