XMLStarlet用表达式更新节点

时间:2016-02-03 13:01:47

标签: xml xmlstarlet

我正在努力使用xmlstarlet的更新功能。我正在尝试使用另一个值更新xml节点值。

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

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

使用-v "value"选项可以很好地工作,但使用-x "xpath"参数并不起作用。我做错了什么?

<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>

1 个答案:

答案 0 :(得分:2)

在这种情况下,-x选项需要相对于要更新的​​元素的xpath。而且,我想你想要那个元素的内容:

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