XML 파일에서 주석을 제거하는 방법은 무엇입니까?

XML 파일에서 주석을 제거하는 방법은 무엇입니까?

XML 파일에서 주석을 제거할 수 있는 명령줄 도구가 있습니까? 아니면 이를 수행하기 위해 XML 파서를 사용하는 작은 프로그램을 작성해야 합니까?

업데이트: 나는 가능한 모든 XML 파일의 하위 집합만 처리하는 솔루션에는 관심이 없습니다.

예를 들어 정규식은 XML 구문 분석을 처리할 수 없습니다.

https://stackoverflow.com/questions/6751105/why-its-not-possible-to-use-regex-to-parse-html-xml-a-formal-explanation-in-la

답변1

나는 이런 식으로 할 것입니다 :

cat myfile.xml | sed '/<!--.*-->/d' | sed '/<!--/,/-->/d' > cleaned.xml

또는:

awk 'in_comment&&/-->/{sub(/([^-]|-[^-])*--+>/,"");in_comment=0}
 in_comment{next}
 {gsub(/<!--+([^-]|-[^-])*--+>/,"");
  in_comment=sub(/<!--+.*/,"");
  print}'

또는:

xmlstarlet ed -d '//comment()' file.xml

답변2

상위 답변을 확장합니다. 전체 행이 아닌 주석만 삭제하려면 다음을 사용해야 합니다.

sed 's/<!--.*-->//'

내 경우에는 전체 내용이 한 줄에 있는 축소된 XML 파일이 있었는데 이전 솔루션에서는 주석이 있는 줄 전체를 삭제했기 때문에 내 파일이 완전히 지워졌습니다.

답변3

이는 XML에서 여러 줄 주석(예: 실패한 테스트)을 정리하는 데 유용합니다. 최소한 직접 선택한 주석은 최종 사용자에게 도움이 됩니다.
perl -i -w -0777pe 's/<!--(.(?<!(HELP|TODO)))*?-->//sg' somefile.xml

관련 정규식에 대한 추가 정보:https://stackoverflow.com/a/1240293/1422630

동일한 결과를 얻을 수 있는 방법이 있지만 xmlstarlet을 사용하는 경우 정규 표현식이 처리할 수 없는 몇 가지 예외가 있을 수 있으므로 선호하지만 지금은 이것이 제가 사용해야 하는 것입니다.

관련 정보