2017-01-04 10 views
1

Я начинаю с последующего файла XML, чтобы добавить некоторые источники данных.Вставьте некоторые элементы XML с xmlstarlet

<?xml version='1.0' encoding='UTF-8'?> 
<server xmlns="urn:jboss:domain:4.2"> 
    <subsystem xmlns="urn:jboss:domain:datasources:4.0"> 
     <datasources> 
      <datasource jndi-name="java:jboss/datasources/ExampleDS" 
       pool-name="ExampleDS"> 
       <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url> 
       <driver>h2</driver> 
       <pool> 
        <min-pool-size>10</min-pool-size> 
        <max-pool-size>20</max-pool-size> 
        <prefill>true</prefill> 
       </pool> 
       <security> 
        <user-name>sa</user-name> 
        <password>sa</password> 
       </security> 
      </datasource> 
      <drivers> 
       <driver name="h2" module="com.h2database.h2"> 
        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> 
       </driver>    
      </drivers> 
     </datasources> 
    </subsystem> 
</server> 

Я ищу команды для этого, чтобы вставить в <datasource>

<datasource jndi-name="java:jboss/datasources/ExampleTestDS"> 
    <driver>h2</driver> 
</datasource> 

Моих текущие попытки для добавления элемента datasourc является

xmlstarlet ed --subnode "/server/subsystem/datasources" \ 
    --type elem -n datasource -v "" \ 
    {INPUT_FILE} 

ответ

1

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

xmlstarlet ed -N x="urn:jboss:domain:datasources:4.0" \ 
    -s //x:datasources --type elem -n xxx \ 
    -s //xxx --type attr -n jndi-name -v "java:jboss/datasourcesExampleTestDS" \ 
    -s //xxx --type elem -n driver -v h2 \ 
    -r //xxx -v datasource {INPUT_FILE} 

Ради удобства я вставить новый элемент с именем xxx и изменить его до переименования его в datasource. Убедитесь, что вы используете временное имя, которое не существует в вашем входном файле.