bash를 이용해서 스크립트를 만들어 JBoss XML 구성 파일을 임의로 실행하고 특정 태그가 보이면 거기에 몇 가지 커스텀 값을 넣어보려고 합니다.
다음 XML은 JBoss 샘플에 있는 XML 구성 파일의 중요한 부분입니다. 내가 해야 할 일은 <jvm>
서버 그룹 태그 내에서 태그를 찾은 다음 <jvm-options>
태그가 존재하는지 확인하는 것입니다. 그렇지 않은 경우 추가하고, 존재하는 경우 <options>
해당 값을 포함하는 레이블을 추가하십시오.
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="-agentpath:"<DT_HOME>/agent/lib/libdtagent.so"=name=<AgentName>,server=<dynaTraceCollectorName>"/>
</jvm-options>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
</server-groups>
</domain>
답변1
XMLStarlet을 사용하면 요소에 하위 노드를 추가하고 기존 요소를 업데이트할 수도 있습니다. 요소의 존재 여부를 다루기 위해 다음과 같이 할 수 있습니다.
- 요소를 삭제합니다.
- 원하는 값을 가진 요소를 추가합니다.
추가하려는 요소가 <newtag>
이고 그 값이 이어야 한다고 가정합니다 tagval
. 또한 newattr
값이 인 속성이 있어야 합니다 attrval
. 즉, 우리가 추가하고 싶은 것은
<newtag newattr="attrval">tagval</newtag>
요소를 제거하려면:
$ xmlstarlet ed -d '//server-group/newtag' file.xml
속성이 있는 요소를 추가하려면:
$ xmlstarlet ed -s '//server-group' -t elem -n 'newtag' -v 'tagval' \
-s '//server-group/newtag' -t attr -n 'newattr' -v 'attrval' file.xml
다음을 함께 추가하세요.
$ xmlstarlet ed -d '//server-group/newtag' \
-s '//server-group' -t elem -n 'newtag' -v 'tagval' \
-s '//server-group/newtag' -t attr -n 'newattr' -v 'attrval' file.xml
주어진 입력 XML
<?xml version="1.0"?>
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="somevalue"/>
</jvm-options>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
</server-groups>
결과는 다음과 같습니다.
<?xml version="1.0"?>
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="somevalue"/>
</jvm-options>
</jvm>
<socket-binding-group ref="full-sockets"/>
<newtag newattr="attrval">tagval</newtag>
</server-group>
</server-groups>
XPath 표현식은 //server-group
일치합니다.모두 server_group
XML에 요소를 입력합니다. name
속성을 속성과 일치시키기만 하려면 으로 main-server-group
변경해야 합니다 .//server-group
//server-group[@name="main-server-group"]
XMLStarlet은 다음에서 사용할 수 있습니다.http://xmlstar.sourceforge.net/, 하지만 아마도 Unix용으로 미리 패키지된 버전이 있을 것입니다(사용하세요). xml
때로는 XMLStarlet 실행 파일이 xmlstarlet
.