使用 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
在恢复方面做得更好,因为它将无根元素包装在 html
和 body
元素中:
<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
如预期。
参考资料
我有一个非常大的 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
在恢复方面做得更好,因为它将无根元素包装在 html
和 body
元素中:
<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
如预期。