XMLStarlet 用表达式更新节点 [英] XMLStarlet updating node with the expression

查看:22
本文介绍了XMLStarlet 用表达式更新节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为 xmlstarlet 的更新功能而苦苦挣扎.我正在尝试使用另一个值更新 xml 节点值.

I am struggling with the xmlstarlet's update function. I am trying to update xml node value with the value of another.

在我的示例中,我尝试使用以下命令将 FVALUE 字段值复制到 QUANTITY 字段:

In my exmaple I'm trying to copy FVALUE field value to QUANTITY field with the command:

xml ed -u "INVOICE_ITEM_LIST/INVOICE_ITEM/QUANTITY" -x "INVOICE_ITEM_LIST/INVOICE_ITEM/PRODUCT_FEATURES/FEATURE/FVALUE"

使用 -v "value" 选项效果很好,但使用 -x "xpath" 参数不起作用.我做错了什么?

Using -v "value" option works perfectly but using -x "xpath" parameter doesn't work. What I'm doing wrong?

<INVOICE_ITEM_LIST>
    <INVOICE_ITEM>
      <PRODUCT_NAME>Product1</PRODUCT_NAME>
      <PRODUCT_FEATURES>
        <FEATURE>
          <FNAME>TotalQuantity</FNAME>
          <FVALUE>6.500</FVALUE>
        </FEATURE>
      </PRODUCT_FEATURES>
      <QUANTITY></QUANTITY>
     </INVOICE_ITEM>
     <INVOICE_ITEM>
      <PRODUCT_NAME>Product2</PRODUCT_NAME>
      <PRODUCT_FEATURES>
        <FEATURE>
          <FNAME>TotalQuantity</FNAME>
          <FVALUE>12</FVALUE>
        </FEATURE>
      </PRODUCT_FEATURES>
      <QUANTITY></QUANTITY>
     </INVOICE_ITEM>
</INVOICE_ITEM_LIST>

推荐答案

在这种情况下,-x 选项需要一个相对于您要更新的元素的 xpath.此外,我想您想要该元素的内容:

In this case the -x option needs an xpath relative to the element that you want to update. Moreover, you want the contents of that element, I guess:

xmlstarlet ed -u "//INVOICE_ITEM/QUANTITY" -x "../PRODUCT_FEATURES/FEATURE/FVALUE/text()"

这篇关于XMLStarlet 用表达式更新节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆