Заменить атрибут на xml через командную строку - PullRequest
1 голос
/ 01 мая 2020

Я искал этот вопрос xmlstarlet обновил атрибут и пытался заменить атрибут в файле конфигурации 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

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

В утилите Gizmo Saxon 10.0 (которая предназначена для целей, аналогичных xmlstarlet), я решил сделать так, чтобы имена без префиксов соответствовали любому пространству имен (или ни одному). Таким образом, эквивалент будет

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

После многих лет наблюдения за людьми, борющимися с пространствами имен, я пришел к выводу, что наличие имен без префиксов, совпадающих с любым пространством имен, намного удобнее для пользователя.

1 голос
/ 01 мая 2020

Ваш файл использует пространства имен (xmlns="urn:jboss:domain:10.0").

xmlstarlet edit --update '//*[local-name()="property"][@name="hibernate.hbm2ddl.auto"]/@value' -v "update" conf.xml

Я использовал //*[local-name()="property"] для обхода всех пространств имен в конф. xml

...