如何從 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,我會更喜歡,因為可能有一些正規表示式可能無法處理的異常,但現在這是我必須使用的。

相關內容