2015-10-16 4 views
1

Я пытаюсь получить xmlstarlet для добавления <security-enabled>false</security-enabled> в "/ configuration/core". Команда запускается без ошибок, но теперь изменения внесены в файл.Попытка добавить элемент в существующий xml-файл с помощью xmlstarlet

XML-файл:

<configuration xmlns="urn:activemq" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd"> 
    <jms xmlns="urn:activemq:jms"> 
    <queue name="DLQ"/> 
    <queue name="ExpiryQueue"/> 
    </jms> 
    <core xmlns="urn:activemq:core"> 
    <!-- this could be ASYNCIO or NIO 
     --> 
    <journal-type>ASYNCIO</journal-type> 
    <paging-directory>./data/paging</paging-directory> 
    <bindings-directory>./data/bindings</bindings-directory> 
    <journal-directory>./data/journal</journal-directory> 
    <large-messages-directory>./data/large-messages</large-messages-directory> 
    <journal-min-files>10</journal-min-files> 
    ... 
    </core> 
</configuration> 

Одна из команд я запустить:

xmlstarlet ed -i "/configuration/core" -t attr -n "security-enabled" -v "false" broker.xml 

Я также использовал XMLStarlet изд -L ... для редактирования на месте, но когда Я заметил, что редактирования не произошло. Я упал -L для STDOUT.

ответ

1

Необходимо, чтобы specify xml namespace properly. В вашем случае:

xmlstarlet ed -L -N a="urn:activemq" -N c="urn:activemq:core" -s "/a:configuration/c:core" -t elem -n "security-enabled" -v "false" broker.xml 

Кроме того, я изменил:

  • -t attr к -t elem поскольку необходимо элемент вместо атрибута
  • -i к -s, так как мы просим суб элемент будет добавлен