通过命令行替换 xml 上的属性
Replace attribute on xml via command line
我正在查看这个问题 xmlstarlet update an attribute 并试图替换 Jboss 配置文件中的属性。
我post这里只是一小部分xml:
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:10.0">
<extensions>
<extension module="org.jboss.as.clustering.infinispan"/>
</extensions>
<system-properties>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
</system-properties>
</server>
我想替换的是 hibernate.hbm2ddl.auto
的值从 validate
到 update
根据之前的回答,我尝试了这个命令,但没有更新值:
xmlstarlet edit --update "//property[@name='hibernate.hbm2ddl.auto']/@value" --value "update" conf.xml
我试过完整路径,但结果是一样的:没有更新。
xmlstarlet edit --update "/server/system-properties/property[@name='hibernate.hbm2ddl.auto']/@value" --value "update" conf.xml
您的文件使用 namespaces (xmlns="urn:jboss:domain:10.0"
).
xmlstarlet edit --update '//*[local-name()="property"][@name="hibernate.hbm2ddl.auto"]/@value' -v "update" conf.xml
我使用 //*[local-name()="property"]
绕过了 conf.xml
中的所有名称空间
在 Saxon 10.0 的 Gizmo 实用程序(旨在提供与 xmlstarlet 类似的目的)中,我决定使无前缀的名称匹配任何名称空间(或 none)。所以等价于
java net.sf.saxon.Gizmo -s:conf.xml
/>update //property[@name="hibernate.hbm2ddl.auto"]/@value with "update"
/>save conf.xml
/>quit
经过多年看到人们为名称空间而苦苦挣扎之后,我开始认为使用不带前缀的名称匹配任何名称空间对用户更友好。
我正在查看这个问题 xmlstarlet update an attribute 并试图替换 Jboss 配置文件中的属性。 我post这里只是一小部分xml:
<?xml version='1.0' encoding='UTF-8'?>
<server xmlns="urn:jboss:domain:10.0">
<extensions>
<extension module="org.jboss.as.clustering.infinispan"/>
</extensions>
<system-properties>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
</system-properties>
</server>
我想替换的是 hibernate.hbm2ddl.auto
的值从 validate
到 update
根据之前的回答,我尝试了这个命令,但没有更新值:
xmlstarlet edit --update "//property[@name='hibernate.hbm2ddl.auto']/@value" --value "update" conf.xml
我试过完整路径,但结果是一样的:没有更新。
xmlstarlet edit --update "/server/system-properties/property[@name='hibernate.hbm2ddl.auto']/@value" --value "update" conf.xml
您的文件使用 namespaces (xmlns="urn:jboss:domain:10.0"
).
xmlstarlet edit --update '//*[local-name()="property"][@name="hibernate.hbm2ddl.auto"]/@value' -v "update" conf.xml
我使用 //*[local-name()="property"]
绕过了 conf.xml
在 Saxon 10.0 的 Gizmo 实用程序(旨在提供与 xmlstarlet 类似的目的)中,我决定使无前缀的名称匹配任何名称空间(或 none)。所以等价于
java net.sf.saxon.Gizmo -s:conf.xml
/>update //property[@name="hibernate.hbm2ddl.auto"]/@value with "update"
/>save conf.xml
/>quit
经过多年看到人们为名称空间而苦苦挣扎之后,我开始认为使用不带前缀的名称匹配任何名称空间对用户更友好。