我正在努力解决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>
在这种情况下,-x 选项需要一个相对于要更新的元素的 xpath。 此外,你想要该元素的内容,我猜:
xmlstarlet ed -u "//INVOICE_ITEM/QUANTITY" -x "../PRODUCT_FEATURES/FEATURE/FVALUE/text()"