2016-02-03 21 views
1

我正在努力与xmlstarlet的更新功能。我试图用另一个值更新xml节点值。XMLStarlet更新节点的表达式

在我〔实施例我试图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> 

回答

2

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

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

嗨,它的工作完美无瑕。非常感谢 –

+0

呃。我所缺少的就是'text()'组件。 (还有一些更好的Google-fu找到你有用的答案。) – roaima