使用 xmlstarlet 修复丢失的根节点

fix missing root node with xmlstarlet

我有一个非常大的 xml,没有根节点(过于简单的示例):

<address>1</address>
<address>2</address>
<address>3</address>
<address>4</address>

我尝试将 xmlstarlet 内的根节点添加到 select 并以这种方式计算一些数据:

 xmlstarlet -q fo -R file.xml | xmlstarlet sel -t -v "count(//address)" 

似乎可行,但删除了除第一个节点以外的所有节点,因此计算无效:

<?xml version="1.0"?>
<address>1</address>

HTML选项,-H

xmlstarlet fo -o -R -H -D file.xml

在恢复方面做得更好,因为它将无根元素包装在 htmlbody 元素中:

<html>
  <body><address>1</address>
<address>2</address>
<address>3</address>
<address>4</address>
</body>
</html>

然后你的count()电话,

xmlstarlet fo -o -R -H -D file.xml | xmlstarlet sel -t -v "count(//address)" 

将 return 4 如预期。

参考资料