
다음과 같이 매우 간단한 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로 변환합니다.awk
sed
2xml
귀하의 예를 들어, 제가 이 문서를 가져간다면:
<?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>
...구문적으로는 정확하지만 읽기가 더 어렵습니다.