Trim 标签内有空格?
Trim whitespace inside tags?
我正在使用 xmllint 重新格式化一些 xml。我注意到它似乎单独留下了封闭的文本。例如,这个
<tag>
<p>
<i>
test
</i>
</p>
</tag>
变成这样
<tag>
<p>
<i>
test
</i>
</p>
</tag>
有没有办法强制它把文本放在开始标签后面,紧接着是结束标签?理想情况下,我想要这样的东西:
<tag>
<p>
<i>test</i>
</p>
</tag>
我想这相当于让它忽略标签内的前导和尾随空格。我可以通过正则表达式进行一些预处理来做到这一点,但是有什么本地方法吗?
TIA。
您应该可以使用 tidy
来做到这一点:
echo '<tag>
<p>
<i>
test
</i>
</p>
</tag>' | tidy -xml -iq
输出:
<tag>
<p>
<i>test</i>
</p>
</tag>
通常 --noblanks
会去除 ignorable/insignificant 空格,但在这种情况下,xmllint 认为空格很重要,不会忽略它。
除了 "tidy" 在另一个答案中的建议,您还可以 use xmlstarlet 规范化所有文本节点的空白...
命令行
xmlstarlet ed -u "//text()" -x "normalize-space()" input.xml
输出
<tag>
<p>
<i>test</i>
</p>
</tag>
$ xmlstarlet ed -u //*[not(*)] -x normalize-space(.) file.xml
<?xml version="1.0"?>
<tag>
<p>
<i>test</i>
</p>
</tag>
我正在使用 xmllint 重新格式化一些 xml。我注意到它似乎单独留下了封闭的文本。例如,这个
<tag>
<p>
<i>
test
</i>
</p>
</tag>
变成这样
<tag>
<p>
<i>
test
</i>
</p>
</tag>
有没有办法强制它把文本放在开始标签后面,紧接着是结束标签?理想情况下,我想要这样的东西:
<tag>
<p>
<i>test</i>
</p>
</tag>
我想这相当于让它忽略标签内的前导和尾随空格。我可以通过正则表达式进行一些预处理来做到这一点,但是有什么本地方法吗?
TIA。
您应该可以使用 tidy
来做到这一点:
echo '<tag>
<p>
<i>
test
</i>
</p>
</tag>' | tidy -xml -iq
输出:
<tag> <p> <i>test</i> </p> </tag>
通常 --noblanks
会去除 ignorable/insignificant 空格,但在这种情况下,xmllint 认为空格很重要,不会忽略它。
除了 "tidy" 在另一个答案中的建议,您还可以 use xmlstarlet 规范化所有文本节点的空白...
命令行
xmlstarlet ed -u "//text()" -x "normalize-space()" input.xml
输出
<tag>
<p>
<i>test</i>
</p>
</tag>
$ xmlstarlet ed -u //*[not(*)] -x normalize-space(.) file.xml
<?xml version="1.0"?>
<tag>
<p>
<i>test</i>
</p>
</tag>