使用 xmlstarlet 编辑 属性 的值
Using xmlstarlet to edit value of property
我有以下 XML 文件:
<Configuration .... status="INFO" >
<properties>
<property name="logfile">/var/log/app.log</property>
<property name="log-level">INFO</property>
</properties>
</Configuration>
我正在尝试将日志级别 属性 中的 INFO 替换为 DEBUG。
[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>
标准输出中的输出与原始文件完全相同,没有任何变化。
我尝试搜索 XPath 以确保我使用了正确的并且有效:
[root]# xmlstarlet sel -t -v "count(Configuration/properties/property[@name='log-level'])" test.xml
1
我也尝试更改@name 而不是@value,它成功了。
我错过了什么?为什么输出(在 stdout 中)没有改变?
输入文件:
<Configuration status="INFO" >
<properties>
<property name="logfile">/var/log/app.log</property2>
<property name="log-level">INFO</property>
</properties>
</Configuration>
要确保您的 XPATH 是正确的,您可以使用以下命令:
[root@]# xmlstarlet el test.xml
Configuration
Configuration/properties
Configuration/properties/property
Configuration/properties/property
选择正确的 XPath 后,为了更改属性的值,您需要 运行 :
[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,例如:
[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>
我有以下 XML 文件:
<Configuration .... status="INFO" >
<properties>
<property name="logfile">/var/log/app.log</property>
<property name="log-level">INFO</property>
</properties>
</Configuration>
我正在尝试将日志级别 属性 中的 INFO 替换为 DEBUG。
[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>
标准输出中的输出与原始文件完全相同,没有任何变化。
我尝试搜索 XPath 以确保我使用了正确的并且有效:
[root]# xmlstarlet sel -t -v "count(Configuration/properties/property[@name='log-level'])" test.xml
1
我也尝试更改@name 而不是@value,它成功了。
我错过了什么?为什么输出(在 stdout 中)没有改变?
输入文件:
<Configuration status="INFO" >
<properties>
<property name="logfile">/var/log/app.log</property2>
<property name="log-level">INFO</property>
</properties>
</Configuration>
要确保您的 XPATH 是正确的,您可以使用以下命令:
[root@]# xmlstarlet el test.xml
Configuration
Configuration/properties
Configuration/properties/property
Configuration/properties/property
选择正确的 XPath 后,为了更改属性的值,您需要 运行 :
[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,例如:
[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>