2016-02-03 25 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