CentOS 7.x下如何移除XML注释并释放其中的标签?
移除XML注释并释放其中标签的解决方案(CentOS 7.4/7.9)
方法一:使用sed命令(针对示例结构)
由于XML注释为多行结构,需要让sed处理多行内容。以下命令可匹配注释块,移除注释标记及块内的说明文字,保留其中的XML标签:
sed ' /<!--/{ :loop N /-->/!b loop s/<!--\s*// s/\s*-->// s/^[^\<]*\n// }' input.xml > output.xml
命令说明:
- 定位到包含
<!--的行,开始循环读取后续行直到匹配到--> - 移除注释块开头的
<!--及周围空白 - 移除注释块结尾的
-->及周围空白 - 删除块内第一行非XML标签的说明文字
注意:该命令适用于示例中的注释结构,若注释内存在复杂格式(如标签与说明文字同行、非法XML注释嵌套),可能无法正确处理。
方法二:使用专业XML工具xmlstarlet(更可靠)
正则处理XML存在天然局限性,推荐使用专业工具xmlstarlet来保证XML结构的正确性。
步骤1:安装xmlstarlet
在CentOS 7.4/7.9中执行以下命令安装:
sudo yum install -y xmlstarlet
步骤2:创建XSLT转换文件
新建uncomment.xsl文件,内容如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="comment()"> <xsl:value-of select="." disable-output-escaping="yes"/> </xsl:template> </xsl:stylesheet>
步骤3:执行转换并过滤无关内容
运行以下命令完成转换,同时过滤掉注释内的说明文字和空行:
xmlstarlet tr uncomment.xsl input.xml | sed '/^[^\<]*$/d' > output.xml
该方案能处理绝大多数合法的XML注释场景,不会破坏原有XML的结构完整性。
内容的提问来源于stack exchange,提问作者Yusuf Altıparmak
相关产品推荐
相关产品推荐

