Bash 스크립트의 XML 파일에 사용자 정의 XML 태그 삽입

Bash 스크립트의 XML 파일에 사용자 정의 XML 태그 삽입

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을 사용하면 요소에 하위 노드를 추가하고 기존 요소를 업데이트할 수도 있습니다. 요소의 존재 여부를 다루기 위해 다음과 같이 할 수 있습니다.

  1. 요소를 삭제합니다.
  2. 원하는 값을 가진 요소를 추가합니다.

추가하려는 요소가 <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_groupXML에 요소를 입력합니다. name속성을 속성과 일치시키기만 하려면 으로 main-server-group변경해야 합니다 .//server-group//server-group[@name="main-server-group"]


XMLStarlet은 다음에서 사용할 수 있습니다.http://xmlstar.sourceforge.net/, 하지만 아마도 Unix용으로 미리 패키지된 버전이 있을 것입니다(사용하세요). xml때로는 XMLStarlet 실행 파일이 xmlstarlet.

관련 정보