Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从xml文件中剥离注释并将其打印出来_Xml_Bash_Sh - Fatal编程技术网

从xml文件中剥离注释并将其打印出来

从xml文件中剥离注释并将其打印出来,xml,bash,sh,Xml,Bash,Sh,我有一个巨大的xml文件,其中包含很多注释 从linux命令行中删除所有注释并很好地格式化xml的“最佳方法”是什么?您可能想看看xmllint工具。它有几个选项(其中一个--format可以很好地打印),但我不知道如何使用这个工具删除注释 另外,请查看一组命令行工具,可以使用xml做任何您想做的事情。然后做: xml c14n --without-comments # XML file canonicalization w/o comments 编辑:OP最终使用了这一行: xmlstarl

我有一个巨大的xml文件,其中包含很多注释


从linux命令行中删除所有注释并很好地格式化xml的“最佳方法”是什么?

您可能想看看
xmllint
工具。它有几个选项(其中一个
--format
可以很好地打印),但我不知道如何使用这个工具删除注释

另外,请查看一组命令行工具,可以使用xml做任何您想做的事情。然后做:

xml c14n --without-comments # XML file canonicalization w/o comments
编辑:OP最终使用了这一行:

xmlstarlet c14n --without-comments old.xml > new.xml

最好的方法是使用XML解析器正确处理所有晦涩难懂的情况。但是,如果您需要一些快速而肮脏的东西,那么有多种可能就足够了。

通过XSLT运行您的XML,并使用空模板进行注释

除注释外,所有XML内容都将传递到输出

为了方便格式化输出,将输出设置为@indent=“yes”:


您可以使用tidy

$ tidy -quiet -asxml -xml -indent -wrap 1024 --hide-comments 1 tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <user username="qwerty" password="ytrewq" roles="manager-gui" />
</tomcat-users>
$tidy-quiet-asxml-xml-indent-wrap 1024——隐藏注释1 tomcat-users.xml

要整理一些简单的东西,比如Tomcat的server.xml,我使用

sed's//-->\x0/g'| grep-zv'^/-->\x0/g'| grep-zv'^
任何地方


首先,sed用0x0字符标记注释的开始和停止,然后grep with
-z
将0x0视为唯一的行分隔符,搜索以注释开头的行,它的-v反转过滤器,只留下有意义的行。最后,
tr-d
\0`删除了所有这些0x0,为了完善它,另一个grep删除了空行:瞧。

xmllint是libxml2的cmdline接口,libxml2是一个具有多种语言绑定的库。例如,我在Perl中使用XML::LibXML。我通常使用:xmlstarlet c14n——没有注释old.XML>new。xml@reinierpost当前位置我理解为什么这个答案看起来令人厌恶。但如果这是一次性的,并且您知道您的注释是注释规范的一个约束良好的子集,那么正则表达式解决方案有什么问题?我同意解析工具更可取(也是最好的答案),但我确实认为在某些特定情况下(例如,简单测试,或只读系统上凌晨2点的危机调出),解析工具是一种有效的替代方法,而且非常方便。有了有效的XML,因此只有注释是注释,我认为XML解析器更好。但是,如果您使用包含条件的注释处理HTML(例如,考虑Internet Explorer),则正则表达式可能是最佳选择。在参数中添加“-modify”以就地更改文件。(你做了备份,对吗?)当心!tidy中存在一个bug,它会删除XML中的空格,因此请谨慎使用上述答案。指向打开的bug的链接:可能与我在
$ tidy -quiet -asxml -xml -indent -wrap 1024 --hide-comments 1 tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <user username="qwerty" password="ytrewq" roles="manager-gui" />
</tomcat-users>
sed 's/<!--/\x0<!--/g;s/-->/-->\x0/g' | grep -zv '^<!--' | tr -d '\0' | grep -v "^\s*$"
function tidy() {
 echo "$( cat $1 | sed 's/<!--/\x0<!--/g;s/-->/-->\x0/g' | grep -zv '^<!--' | tr -d '\0' | grep -v "^\s*$")"
}

tidy server.xml