我正在研究这个问题,xmlstarlet update an attribute,并试图替换Jboss配置文件中的一个属性。我在这里只发布了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发布于 2020-05-01 09:51:46
您的文件使用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中的所有命名空间
发布于 2020-05-01 11:28:23
在Saxon10.0的Gizmo实用程序中(它的目的与xmlstarlet类似),我决定让没有前缀的名称匹配任何名称空间(或者没有)。所以等价物
java net.sf.saxon.Gizmo -s:conf.xml
/>update //property[@name="hibernate.hbm2ddl.auto"]/@value with "update"
/>save conf.xml
/>quit多年来,人们一直在与名称空间进行斗争,经过多年的努力,我开始认为,没有前缀的名称与任何名称空间相匹配,对用户来说更加友好。
https://stackoverflow.com/questions/61539976
复制相似问题