【问题标题】:xmlstarlet update through batch file not updating/working通过批处理文件更新xmlstarlet不更新/工作
【发布时间】:2017-12-18 13:56:37
【问题描述】:

我有我正在尝试编辑的任务计划程序 xml 文件。

        <?xml version="1.0" encoding="UTF-16"?>
    <Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task" version="1.4">
      <RegistrationInfo>
        <Date>2017-03-12T16:40:52.4111579</Date>
        <Author>Kevin</Author>
        <Description>Runs Batch File For Counter</Description>
        <URI>THETASKTITLEGOESHERE</URI>
      </RegistrationInfo>
  <Actions Context="Author">
    <Exec>
      <Command>"ACTIONGOESHERE"</Command>
    </Exec>
  </Actions>
</Task>

这是我在批处理文件中的内容。

@echo off
pushd %~dp0

xml ed -inplace -r "/Task/RegistrationInfo/Author" -v CGL XMLTEST1.xml
xml ed -inplace -r "/Task/RegistrationInfo/URI" -v CGL-FakeTitle XMLTEST1.xml
xml ed -inplace -r "/Task/Actions/Exec/Command" -v "C:\Batch\Counter.bat" XMLTEST1.xml
pause

我已经尝试过这里的建议; xmlstarlet update value nothing happens

在末尾添加“ > XMLTEST1output.xml”会生成一个空文件。 任何的意见都将会有帮助。谢谢!

【问题讨论】:

  • 选项-inplace有什么作用?
  • 一些xmlstartlets 有一个--inplace 选项,可以将更改保存到原始文件。但这并不能解释为什么(例如).../URI 值在我的测试中不会更改为 CGL-FakeTitle。这些都不适用于 -r 或 -u 吗?有人发现“我们”思维中的错误吗?谢谢,祝大家好运。
  • 看看我对上面链接的评论。不要使用xml ... file.xml &gt; file.xml!
  • 我尝试了两种方法,但无法使其正常工作。我宁愿不使用 --inplace 并将其作为带有 output.xml 的模板,之后我可以更改名称。

标签: batch-file xml-namespaces xmlstarlet


【解决方案1】:

这适用于我的 Linux 和 xmlstarlet:

xmlstarlet edit --inplace \
           -N x="http://schemas.microsoft.com/windows/2004/02/mit/task" \
           -u "//x:Task/x:RegistrationInfo/x:Author" -v "CGL" \
           -u "//x:Task/x:RegistrationInfo/x:URI"    -v "CGL-FakeTitle" \
           -u "//x:Task/x:Actions/x:Exec/x:Command"  -v "C:\Batch\Counter.bat" XMLTEST1.xml

我从 -r(重命名)切换到 -u 以更新值。在 XMLTEST1.xml 中,我将 UTF-16 替换为 UTF-8。

【讨论】:

  • 谢谢。我尝试了 -u 但仍然如此。它工作。明天我会尝试替换 UTF,看看是否有帮助。
猜你喜欢
  • 2015-08-16
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多