我正在努力使用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>
答案 0 :(得分:2)
在这种情况下,-x选项需要相对于要更新的元素的xpath。而且,我想你想要那个元素的内容:
xmlstarlet ed -u "//INVOICE_ITEM/QUANTITY" -x "../PRODUCT_FEATURES/FEATURE/FVALUE/text()"