【问题标题】:What is wrong with my xmlstarlet update command?我的 xmlstarlet 更新命令有什么问题?
【发布时间】:2017-10-13 17:12:20
【问题描述】:

我正在尝试使用xmlstarlet 在 xml 文件中编辑元素的值,但编辑没有效果。不显示任何错误,也不显示任何成功消息。

我已经使用在线 xpath tester 测试了我的 xpath 查询。

这是我的 xml 文件:

<workflow scriptid="customworkflow_sktest01">
  <runasadmin>F</runasadmin>
  <workflowstates>
    <workflowstate scriptid="workflowstate15154">
      <description></description>
      <workflowactions triggertype="ONENTRY">
        <setfieldvalueaction scriptid="workflowaction88038">
          <valuejoinfield></valuejoinfield>
          <valueselect>24506</valueselect>
          <valuetext></valuetext>
        </setfieldvalueaction>
      </workflowactions>
    </workflowstate>
  </workflowstates>
</workflow>

这是我与 xmlstarlet 一起使用的命令:

C:\...\xmlstarlet-1.6.1-win32\xmlstarlet-1.6.1>xml edit -P --update "/workflow/workflowstates/workflowstate/workflowactions/setfieldvalueaction[@scriptid="workflowaction88038"]/valueselect" -v 1234 "C:\...\customworkflow_sktest01.xml"

当我运行该命令时,xmlstarlet 只会回显未修改的源 xml。

解决方案更新:

以下是工作命令:

C:\...\xmlstarlet-1.6.1-win32\xmlstarlet-1.6.1>xml edit -P --update "/workflow/workflowstates/workflowstate/workflowactions/setfieldvalueaction[@scriptid='workflowaction88038']/valueselect" -v 1234 "C:\...\customworkflow_sktest01.xml"

【问题讨论】:

    标签: xml windows xpath xmlstarlet quoting


    【解决方案1】:

    我建议更换

    "workflowaction88038"
    

    通过

    'workflowaction88038'
    

    【讨论】:

    • 好点 -- if 这是在类似于 UNIX shell 的东西上,那些双引号将被 shell 解析为语法,而不是传递给 XMLStarlet,所以不会被视为 XPath 的一部分。 (鉴于 `C:\`,我不确定这是否真的如此,但无论如何这是一个很好的起点)。
    • 我在 Windows 上,但用 ' 替换 " 确实解决了问题 - 谢谢!
    • Windows 下的双引号解析与 UNIX shell 的效果类似,虽然它发生在被调用程序的 libc 中,而不是 shell 本身。
    猜你喜欢
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2018-01-25
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多