2013-07-19 5 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 Сель -t -m "шлюз/SMSCs/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}' 
Смежные вопросы