首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过命令行替换xml上的属性

通过命令行替换xml上的属性
EN

Stack Overflow用户
提问于 2020-05-01 09:33:48
回答 2查看 168关注 0票数 2

我正在研究这个问题,xmlstarlet update an attribute,并试图替换Jboss配置文件中的一个属性。我在这里只发布了xml的一小部分:

代码语言:javascript
复制
<?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.autovalidateupdate的值

在前面的答案之后,我尝试了这个命令,但不要更新值:

代码语言:javascript
复制
xmlstarlet edit   --update "//property[@name='hibernate.hbm2ddl.auto']/@value"   --value "update" conf.xml

我试着遵循完整的路径,但结果是一样的:没有更新。

代码语言:javascript
复制
xmlstarlet edit   --update "/server/system-properties/property[@name='hibernate.hbm2ddl.auto']/@value"   --value "update" conf.xml
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-01 09:51:46

您的文件使用namespaces (xmlns="urn:jboss:domain:10.0")。

代码语言:javascript
复制
xmlstarlet edit --update '//*[local-name()="property"][@name="hibernate.hbm2ddl.auto"]/@value' -v "update" conf.xml

我使用//*[local-name()="property"]绕过conf.xml中的所有命名空间

票数 3
EN

Stack Overflow用户

发布于 2020-05-01 11:28:23

在Saxon10.0的Gizmo实用程序中(它的目的与xmlstarlet类似),我决定让没有前缀的名称匹配任何名称空间(或者没有)。所以等价物

代码语言:javascript
复制
java net.sf.saxon.Gizmo -s:conf.xml
/>update //property[@name="hibernate.hbm2ddl.auto"]/@value with "update"
/>save conf.xml
/>quit

多年来,人们一直在与名称空间进行斗争,经过多年的努力,我开始认为,没有前缀的名称与任何名称空间相匹配,对用户来说更加友好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61539976

复制
相关文章

相似问题

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