是否有命令行命令或实用程序可以用来仅显示 xml 文档的标签结构?我查看了 xmllint 但没有看到可以执行此操作的开关。对于像这样的结构
<tag1><tag2><tag2-5>value1</tag2-5><tag3>value2</tag3></tag2></tag1>
我想看看
<tag1><tag2><tag2-5></tag2-5><tag3></tag3></tag2></tag1>
答案1
我认为(但完全不确定)您可以通过在全局范围内删除>
和之间的字符来逃脱<
:
sed 's/>[^<]*</></g' /path/to/file.xml
答案2
以下xmlstarlet
命令会将文档中每个纯文本节点的值设置为空字符串。它还会保留节点之间的空格(不进行漂亮打印)并省略添加 XML 声明标签 ( <?xml...?>
):
xmlstarlet ed -P -O -u '//child::text()' -v '' file.xml
鉴于您的示例文档file.xml
,这将产生
<tag1><tag2><tag2-5></tag2-5><tag3></tag3></tag2></tag1>
没有-P
和-O
选项:
<?xml version="1.0"?>
<tag1>
<tag2>
<tag2-5></tag2-5>
<tag3></tag3>
</tag2>
</tag1>
也可以使用
xmlstarlet ed -d '//child::text()' file.xml
到删除值而不是将它们设置为空字符串,但这会生成没有值的节点(而不是具有空值的节点):
<?xml version="1.0"?>
<tag1>
<tag2>
<tag2-5/>
<tag3/>
</tag2>
</tag1>
添加-P
和-O
选项将生成
<tag1><tag2><tag2-5/><tag3/></tag2></tag1>
取决于你是什么实际上如果想要这样做,可以使用el
( elements
) 子命令xmlstarlet
来获取文档结构的另一种表示形式:
xmlstarlet el file.xml
您的示例的输出:
tag1
tag1/tag2
tag1/tag2/tag2-5
tag1/tag2/tag3
也可以看看xmlstarlet el --help
。