我在和另一个XMLStarlet挑战者战斗。我现在尝试的是用一个字段的值来更新另一个字段的值。在我的例子中,源字段INVOICE/INVOICE_ITEM_LIST/INVOICE_ITEM/PRODUCT_FEATURES/FEATURE/FVALUE不存在,XmlStarlet崩溃。有没有办法避免这种情况,只有在源字段可用时才进行复制?
提前感谢您的帮助
xmlstarlet ed -u "INVOICE/INVOICE_ITEM_LIST/INVOICE_ITEM/QUANTITY" -x "../PRODUCT_FEATURES/FEATURE/FVALUE/text()" 我的示例XML:
<INVOICE_ITEM_LIST>
<INVOICE_ITEM>
<PRODUCT_FEATURES/>
<QUANTITY>to_be_set</QUANTITY>
</INVOICE_ITEM>
<INVOICE_ITEM>
<PRODUCT_FEATURES>
<FEATURE>
<FNAME>TotalQuantity</FNAME>
<FVALUE>32.500</FVALUE>
<FUNIT>MTR</FUNIT>
</FEATURE>
</PRODUCT_FEATURES>
<QUANTITY>to_be_set</QUANTITY>
</INVOICE_ITEM>
</INVOICE_ITEM_LIST>
发布于 2016-06-14 14:34:16
可以,您可以使用xpath谓词仅选择那些具有FVALUE的节点:
xmlstarlet ed -u "/INVOICE_ITEM_LIST/INVOICE_ITEM[PRODUCT_FEATURES/FEATURE/FVALUE]/QUANTITY" \
-x "../PRODUCT_FEATURES/FEATURE/FVALUE/text()" 请注意,我已经更改了路径以适合您的示例XML。
https://stackoverflow.com/questions/37718518
复制相似问题