2017-01-04 2 views
1

Ich beginne mit der folgenden XML-Datei, um einige Datenquellen hinzuzufügen.Fügen Sie einige XML-Elemente mit 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> 

Ich bin für Befehle für diese Suche nach Einfügen in <datasource>

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

Mein aktuellen Versuch für das Element datasourc hinzufügen ist

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

Antwort

1

Das Problem ist, dass Ihre Eingabedatei verwendet ein Namespace, den Sie nicht in Ihrem XPath-Ausdruck verwenden. Versuchen Sie folgendes:

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} 

Aus Gründen der Bequemlichkeit, füge ich ein neues Element namens xxx und ändern Sie es, bevor es zu datasource umbenennen. Stellen Sie sicher, dass Sie einen temporären Namen verwenden, der in Ihrer Eingabedatei nicht vorhanden ist.

Verwandte Themen