XMLStarlet 使用表达式更新节点



我正在努力解决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()"

相关内容

  • 没有找到相关文章

最新更新