首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XMLStarlet编辑功能实现IF

使用XMLStarlet编辑功能实现IF
EN

Stack Overflow用户
提问于 2016-06-09 14:37:50
回答 1查看 120关注 0票数 1

我在和另一个XMLStarlet挑战者战斗。我现在尝试的是用一个字段的值来更新另一个字段的值。在我的例子中,源字段INVOICE/INVOICE_ITEM_LIST/INVOICE_ITEM/PRODUCT_FEATURES/FEATURE/FVALUE不存在,XmlStarlet崩溃。有没有办法避免这种情况,只有在源字段可用时才进行复制?

提前感谢您的帮助

代码语言:javascript
复制
xmlstarlet ed -u "INVOICE/INVOICE_ITEM_LIST/INVOICE_ITEM/QUANTITY" -x    "../PRODUCT_FEATURES/FEATURE/FVALUE/text()" 

我的示例XML:

代码语言:javascript
复制
<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>

EN

回答 1

Stack Overflow用户

发布于 2016-06-14 14:34:16

可以,您可以使用xpath谓词仅选择那些具有FVALUE的节点:

代码语言:javascript
复制
xmlstarlet ed -u "/INVOICE_ITEM_LIST/INVOICE_ITEM[PRODUCT_FEATURES/FEATURE/FVALUE]/QUANTITY" \
  -x "../PRODUCT_FEATURES/FEATURE/FVALUE/text()" 

请注意,我已经更改了路径以适合您的示例XML。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37718518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档