XMLStarlet 用表达式更新节点 [英] XMLStarlet updating node with the expression
本文介绍了XMLStarlet 用表达式更新节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在为 xmlstarlet 的更新功能而苦苦挣扎.我正在尝试使用另一个值更新 xml 节点值.
I am struggling with the xmlstarlet's update function. I am trying to update xml node value with the value of another.
在我的示例中,我尝试使用以下命令将 FVALUE
字段值复制到 QUANTITY
字段:
In my exmaple I'm trying to copy FVALUE
field value to QUANTITY
field with the command:
xml ed -u "INVOICE_ITEM_LIST/INVOICE_ITEM/QUANTITY" -x "INVOICE_ITEM_LIST/INVOICE_ITEM/PRODUCT_FEATURES/FEATURE/FVALUE"
使用 -v "value"
选项效果很好,但使用 -x "xpath"
参数不起作用.我做错了什么?
Using -v "value"
option works perfectly but using -x "xpath"
parameter doesn't work. What I'm doing wrong?
<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.此外,我想您想要该元素的内容:
In this case the -x option needs an xpath relative to the element that you want to update. Moreover, you want the contents of that element, I guess:
xmlstarlet ed -u "//INVOICE_ITEM/QUANTITY" -x "../PRODUCT_FEATURES/FEATURE/FVALUE/text()"
这篇关于XMLStarlet 用表达式更新节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文