2013-07-19 42 views
3

如何从所有元素中提取“失败”并添加它们?使用xmlstarlet提取多个值

<gateway> 
    <smscs> 
     <count>3</count> 
     <smsc> 
      <id>a</id> 
      <received><sms>0</sms><dlr>0</dlr></received> 
      <sent><sms>10537</sms><dlr>0</dlr></sent> 
      <failed>13</failed> 
      <queued>6272</queued> 
     </smsc> 
     <smsc> 
      <id>b</id> 
      <received><sms>0</sms><dlr>0</dlr></received> 
      <sent><sms>10530</sms><dlr>0</dlr></sent> 
      <failed>10</failed> 
      <queued>6284</queued> 
     </smsc> 
     <smsc> 
      <id>c</id> 
      <received><sms>0</sms><dlr>0</dlr></received> 
      <sent><sms>10679</sms><dlr>0</dlr></sent> 
      <failed>11</failed> 
      <queued>6291</queued> 
     </smsc> 
    </smscs> 
</gateway> 
+0

能提取他们在用线'xmlstarlet SEL -t -m “网关/短信中心/ SMSC /失败” -v “” -n' – conandor

回答

4

我只是用

xmlstarlet sel -t -v "sum(/gateway/smscs/smsc/failed)" -n input.xml 

其返回

34 

的想法是使用sum()函数,它接受一个节点集,并返回所有元素串的总和值转换为数字。

0

解决了

xmlstarlet sel -t -m "gateway/smscs/smsc/failed" -v "." -n | awk '{s+=$1} END {print s}'