You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xmlstarlet将NewTempP元素结构复制到同级fig元素中

处理XML:将NewTempP元素完整复制到同级fig元素中

需求

遍历每个带有属性和子元素的NewTempP元素,将其完整结构(包含所有属性、子元素)复制到同级的fig元素中作为子元素。

原始XML示例

<sec>
    <NewTempP  mimetype="image" mime-subtype="jpeg" xlink:href="image1.jpeg">
            <alt-text>Describes a picture</alt-text>
        </NewTempP >
        <p>test</p>
        <fig> </fig>
    <NewTempP  mimetype="image" mime-subtype="png" xlink:href="image1.png">
           <alt-text>Describes a picture</alt-text>
    </NewTempP >
    <p>test</p>
     <fig> </fig>
   ……..
</sec>

尝试的无效命令

xmlstarlet ed -L -P -u "//fig[preceding-sibling::*[1][self:: NewTempP/@*]]/inline-graphic" -x "string(../preceding-sibling::NewTempP [1]/@*)" test.xml

该命令无效的原因:试图更新不存在的inline-graphic元素,且仅尝试提取属性文本,没有复制完整的节点结构。

期望结果

<sec>
    <NewTempP  mimetype="image" mime-subtype="jpeg" xlink:href="image1.jpeg">
            <alt-text>Describes a picture</alt-text>
        </NewTempP >
        <p>test</p>
        <fig>
           <NewTempP  mimetype="image" mime-subtype="jpeg" xlink:href="image1.jpeg">
              <alt-text>Describes a picture</alt-text>
          </NewTempP >
       </fig>
       <NewTempP  mimetype="image" mime-subtype="png" xlink:href="image1.png">
           <alt-text>Describes a picture</alt-text>
       </NewTempP >
       <p>test</p>
       <fig>
         <NewTempP  mimetype="image" mime-subtype="png" xlink:href="image1.png">
              <alt-text>Describes a picture</alt-text>
        </NewTempP >
      </fig>
   ……..
</sec>

正确解决方案

使用xmlstarlet的copy-of操作,将每个fig对应的前置NewTempP节点完整复制到fig内部:

xmlstarlet ed -L -P -s "//fig" -t copy-of -x "../preceding-sibling::NewTempP[1]" test.xml

命令说明

  • -L:直接修改原文件
  • -P:保留原始格式(缩进等)
  • -s "//fig":选择所有fig节点作为目标,在其内部添加内容
  • -t copy-of:指定操作类型为复制节点
  • -x "../preceding-sibling::NewTempP[1]":通过XPath找到当前fig节点的前序兄弟节点中第一个NewTempP,复制该节点的完整结构

内容的提问来源于stack exchange,提问作者Ofuuzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:05:00