不计算不同xml标签中的条目数

问题描述 投票:0回答:1

我有一个带有添加和删除标签的XML格式文件。除了鸟类和人类之外,还有许多类别。因此,xml文件下面会有许多不同类别的条目,其中包含许多值,如下所示

<xml version=1.0>
   <NameCategory="Birds">
       <Added>
         <value name="Duck" count="1"></value>
         <value name="Dove" count="2"></value>
       </Added>
       <Deleted>
         <value name="crow" count="1"></value>
         <value name="crane" count="10"></value>
       </Deleted>
   </NameCategory>
   <NameCategory="Humans">
         <value name="john" count="1"></value>
   </NameCategory>
</xml>

所以在这里,我需要计算总数。标签中每个类别的条目,如as

Total No Of Added Birds=2
Total No Of Deleted Birds=2
Total No Of Added Humans=1
xml bash awk grep
1个回答
2
投票

使用xmlstarlet和这个固定的XML文件:

<?xml version="1.0"?>
<root>
  <fixed NameCategory="Birds">
    <Added>
      <value name="Duck" count="1"/>
      <value name="Dove" count="2"/>
    </Added>
    <Deleted>
      <value name="crow" count="1"/>
      <value name="crane" count="10"/>
    </Deleted>
  </fixed>
  <fixed NameCategory="Humans">
    <value name="john" count="1"/>
  </fixed>
</root>

显示添加的鸟类:

xmlstarlet select --template --value-of "//root/fixed[@NameCategory='Birds']/Added/value/@name" --nl file.xml

输出:

Duck
Dove

计数添加鸟类:

xmlstarlet select --template --value-of "count(//root/fixed[@NameCategory='Birds']/Added/value/@name)" file.xml

输出:

2

Count使用一个命令添加和删除鸟类和人类:

xmlstarlet select --template \
   --value-of "count(//root/fixed[@NameCategory='Birds']/Added/value/@name)" --nl \
   --value-of "count(//root/fixed[@NameCategory='Birds']/Added/value/@name)" --nl \
   --value-of "count(//root/fixed[@NameCategory='Humans']/value/@name)" --nl file.xml

输出:

2
2
1

带前缀的文字:

xmlstarlet select --template \
   --value-of "concat('Total No Of Added Birds=',count(//root/fixed[@NameCategory='Birds']/Added/value/@name))" --nl \
   --value-of "concat('Total No Of Deleted Birds=',count(//root/fixed[@NameCategory='Birds']/Deleted/value/@name))" --nl \
   --value-of "concat('Total No Of Added Humans=',count(//root/fixed[@NameCategory='Humans']/value/@name))" --nl file.xml

输出:

Total No Of Added Birds=2
Total No Of Deleted Birds=2
Total No Of Added Humans=1

见:xmlstarlet select --help

© www.soinside.com 2019 - 2024. All rights reserved.