首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xmlstarlet编辑属性值

使用xmlstarlet编辑属性值
EN

Stack Overflow用户
提问于 2021-01-26 18:24:36
回答 1查看 115关注 0票数 2

我有以下XML文件:

代码语言:javascript
复制
<Configuration .... status="INFO" >
  <properties>
    <property name="logfile">/var/log/app.log</property>
    <property name="log-level">INFO</property>
  </properties>
</Configuration>

我正在尝试替换日志级别属性中的信息以进行调试。

代码语言:javascript
复制
[root]# xmlstarlet edit --update "/Configuration/properties/property[@name='log-level']/@value" --value DEBUG test.xml
<?xml version="1.0"?>
<Configuration status="INFO">
  <properties>
    <property name="logfile">/var/log/app.log</property2>
    <property name="log-level">INFO</property>
  </properties>
</Configuration>

stdout中的输出与orig文件完全相同,没有任何变化。

我尝试搜索XPath,以确保我使用的是正确的sure,并且它工作正常:

代码语言:javascript
复制
[root]# xmlstarlet sel -t -v "count(Configuration/properties/property[@name='log-level'])" test.xml
1

我还尝试更改@name而不是@value,它起作用了。

我错过了什么?为什么输出(在stdout中)没有改变?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-26 21:33:10

输入文件:

代码语言:javascript
复制
<Configuration status="INFO" >
  <properties>
    <property name="logfile">/var/log/app.log</property2>
    <property name="log-level">INFO</property>
  </properties>
</Configuration>

为了确保您的XPATH是正确的路径,您可以使用以下命令:

代码语言:javascript
复制
[root@]# xmlstarlet el test.xml

    Configuration
    Configuration/properties
    Configuration/properties/property
    Configuration/properties/property

在选择了正确的XPath之后,为了更改属性的值,您需要运行:

代码语言:javascript
复制
[root]# xmlstarlet edit --update "/Configuration/properties/property[@name='log-level']" --value "DEBUG" test.xml
<?xml version="1.0"?>
<Configuration status="INFO">
  <properties>
    <property name="logfile">/var/log/app.log</property2>
    <property name="log-level">DEBUG</property>
  </properties>
</Configuration>

不需要像我在问题中那样指定/@value。如果要更改特定属性的名称,应在XPath的末尾指定/@attribute_name,例如:

代码语言:javascript
复制
[root]# xmlstarlet edit --update "/Configuration/properties/property[@name='log-level']/@name" --value "DEBUG" test.xml
<?xml version="1.0"?>
<Configuration status="INFO">
  <properties>
    <property name="logfile">/var/log/app.log</property2>
    <property name="DEBUG">INFO</property>
  </properties>
</Configuration>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65899565

复制
相关文章

相似问题

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