XML-разбор одного значения - PullRequest
0 голосов
/ 23 января 2012

У меня есть файл, который продолжает добавлять следующий XML. То, что я хочу получить из переменной - это процентComplete из jobStatus. Как бы я получить это? Не уверен, как разобрать xml. Я пытался использовать XMLStarlet, но не смог. Я хочу получить процентную долю в переменной, которую я могу использовать в оболочке.

<batchStatus name="" submissionTime="1/23/12 10:00:26 AM" sentBy="mike" 
timeElapsed="43 second(s)" timeRemaining="4 minute(s)" timeElapsedSeconds="43"
timeRemainingSeconds="294" percentComplete="12" resumePercentComplete="0" 
status="Processing" batchid="FD66DC21-6AA4-47FB-A3F0-7300C7BDAB8A" /batchStatus>
<jobStatus name="file.mov" submissionTime="1/23/12 10:00:26 AM" sentBy="mike"
 jobType="Compressor" priority="HighPriority" timeElapsed="43 second(s)" 
timeRemaining="4 minute(s)" timeElapsedSeconds="43" timeRemainingSeconds="294"
 percentComplete="12" resumePercentComplete="0" status="Processing: Transcoding" 
jobid="FDF1A488-51B9-4B9A-908B-FD5D95CE7E92" 
batchid="FD66DC21-6AA4-47FB-A3F0-7300C7BDAB8A" /jobStatus>

Ответы [ 2 ]

1 голос
/ 23 января 2012

Вы можете попробовать что-то вроде этого -

var=$(awk -v FS="[ =\"]" '/^<jobStatus/,/\/jobStatus>$/{for (i=1;i<=NF;i++) if ($i~/percentComplete/) print $(i+2)}' file | tail -n 1)
[jaypal:~/Temp] echo $var
12
1 голос
/ 23 января 2012

См. Аналогичный пост здесь: Синтаксический анализ XML с использованием терминала Unix

Если вы не привыкли к XML / XSLT и не хотите учиться разбирать его, тогда вы можетесделай тихий и грязный и вырезай ответ с помощью поиска.

Другой вариант ... Я бы порекомендовал парсер Xerces, но есть и другие.Проверьте вышеуказанную ссылку, потому что оба этих метода упомянуты там.

...