首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用xmlstarlet更新xml文件

如何使用xmlstarlet更新xml文件
EN

Stack Overflow用户
提问于 2015-03-26 04:25:29
回答 1查看 13.7K关注 0票数 19

我正在使用windows版本的xmlstarlet通过windows批处理文件更新一个xml文件。

代码语言:javascript
复制
xml edit --update "/xml/table/rec[@id=3]/@id" --value 10 %xmlfile%

我预计这会将rec node的id属性更新为10。当我运行此命令时,我在命令行中看到了预期的更新后的xml,但文件从未更新过。

我该怎么做呢,我不想重写整个文件,因为文件可能会很大。

更新前:

代码语言:javascript
复制
<?xml version="1.0"?>
<xml>
  <table>
    <rec id="1" />
    <rec id="2" />
    <rec id="3" />
  </table>
</xml>

更新后:

代码语言:javascript
复制
<?xml version="1.0"?>
<xml>
  <table>
    <rec id="1" />
    <rec id="2" />
    <rec id="10" />
  </table>
</xml>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-26 04:47:44

您没有显示您的输入文档,但我假设它是取自xmlstarlet documentation的以下内容

代码语言:javascript
复制
<xml>
  <table>
    <rec id="1">
      <numField>123</numField>
      <stringField>String Value</stringField>
    </rec>
    <rec id="2">
      <numField>346</numField>
      <stringField>Text Value</stringField>
    </rec>
    <rec id="3">
      <numField>-23</numField>
      <stringField>stringValue</stringField>
    </rec>
  </table>
</xml>

xmlstarlet修改文件,但结果被发送到标准输出,而不是保存在原始文件中。使用另一个选项--inplace就地修改文件:

代码语言:javascript
复制
$ xml ed --inplace -u "/xml/table/rec[@id='3']/@id" -v 5 rec.xml

然后:

代码语言:javascript
复制
$ cat rec.xml
<?xml version="1.0"?>
<xml>
  <table>
    <rec id="1">
      <numField>123</numField>
      <stringField>String Value</stringField>
    </rec>
    <rec id="2">
      <numField>346</numField>
      <stringField>Text Value</stringField>
    </rec>
    <rec id="5">
      <numField>-23</numField>
      <stringField>stringValue</stringField>
    </rec>
  </table>
</xml>

顺便说一句,这个问题似乎问了一些非常类似于this question的问题。

编辑:根据@npostavs的建议,此选项在编辑帮助中列出:

代码语言:javascript
复制
$ xml edit --help
...
-L (or --inplace)   - edit file inplace
...
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29265833

复制
相关文章

相似问题

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