간단한 XML 파일을 업데이트하는 CLI 명령

간단한 XML 파일을 업데이트하는 CLI 명령

다음과 같이 매우 간단한 XML 구성 파일에서 문자열을 프로그래밍 방식으로 업데이트하고 싶습니다.

<?xml version="1.0"?>
<x>
    <z>should be changed</z>
</x>
<y>
    <z>should NOT be changed</z>
</y>

y/z가 아닌 x/z를 업데이트하는 간단한 CLI 명령이 있습니까? 아마도 다음과 같은 XPath 선택기 인수가 있을 수 있습니다.

$ xml-update myfile.xml /x/z "my new string"

Perl이나 Python으로 무언가를 작성할 수 있지만 이 문제의 단순성을 고려하면 이미 이 작업을 수행하는 영리한 Unix 유틸리티가 있을 것입니다.

업데이트: 찾아봤는데 좀 과한 것 같네요. 그리고 먼저 XSLT를 배워야 할 것입니다.http://developerblog.redhat.com/2013/12/05/xml-editing-bash-script/

답변1

당신은 사용할 수 있습니다xml2/2xml별다른 소란 없이 명령줄에서 XML을 처리하는 도구입니다. XML 문서를 또는 xml2같은 기존 텍스트 처리 도구에 사용하기에 적합한 행 기반 형식으로 변환 하고 이 형식을 가져와 다시 XML로 변환합니다.awksed2xml

귀하의 예를 들어, 제가 이 문서를 가져간다면:

<?xml version="1.0"?>
<doc>
<x>
    <z>should be changed</z>
</x>
<y>
    <z>should NOT be changed</z>
</y>
</doc>

해당 콘텐츠를 실행하면 xml2다음이 생성됩니다.

$ xml2 < doc.xml
/doc/x/z=should be changed
/doc/y/z=should NOT be changed

<z>다음과 같이 요소 의 내용을 수정할 수 있습니다 .

xml2 < doc.xml |
sed '/\/doc\/x\/z/ s/should be changed/look ma no hands/' |
2xml | tidyp -xml -i -q

검색 표현식 을 사용하여 sed로 시작하는 줄을 명시적으로 찾은 /doc/y/z다음 해당 줄의 내용을 수정하여 다음을 제공합니다.

<doc>
  <x>
    <z>look ma no hands</z>
  </x>
  <y>
    <z>should NOT be changed</z>
  </y>
</doc>

XML 포맷터인 를 통해 출력을 전달했습니다 tidyp. 그렇지 않으면 문서가 다음과 같을 것이기 때문입니다.

<doc><x><z>look ma no hands</z></x><y><z>should NOT be changed</z></y></doc>

...구문적으로는 정확하지만 읽기가 더 어렵습니다.

관련 정보