XMLStarlet使用表达式更新节点

XMLStarlet使用表达式更新节点,xml,xmlstarlet,Xml,Xmlstarlet,我正在努力使用xmlstarlet的更新函数。我试图用另一个的值更新xml节点值 在我的exmaple中,我试图使用以下命令将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”参数不起作用。我做

我正在努力使用xmlstarlet的更新函数。我试图用另一个的值更新xml节点值

在我的exmaple中,我试图使用以下命令将
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
总量
6.500
产品2
总量
12

在本例中,-x选项需要一个相对于要更新的元素的xpath。此外,我猜,您需要该元素的内容:

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

啊。我所缺少的就是
text()
组件。(还有一些更好的Google fu可以帮你找到有用的答案。)