Я пытаюсь разобрать файлы XML и создать CSV определенных значений. Вот пример XML-файла: http://forecast.weather.gov/MapClick.php?lat=31.7815&lon=-84.3711&FcstType=digitalDWML
XML-файл имеет два разных типа узлов, которые меня интересуют.
start-valid-time
узлы (//start-valid-time
)- Атрибут
coverage
узловvalue
, у которых нет атрибутаadditional
(//weather-conditions/value[not(@additive)]/@coverage
).
Узлы связаны между собой не вложенностью, а положением. Первый узел start-valid-time
соответствует первому атрибуту //weather-conditions/value[not@additive)]/@coverage
.
Я хотел бы вывести start-valid-time
, за которым следует запятая, за которой следует соответствующий атрибут coverage
. например
2015-03-11T14:00:00-04:00, chance
2015-03-11T15:00:00-04:00, chance
...
2015-03-12T03:00:00-04:00, slight chance
Я пытался использовать различные команды xmlstarlet
безрезультатно.
Вот один:
xmlstarlet sel -T -t -m "//weather-conditions/value[not(@additive)]" -v "//start-valid-time" -v "@coverage" -n XML
Возможно, мне ближе всего подошла эта команда:
xmlstarlet sel -T -t -m "//start-valid-time" -v "concat(current(),',',//weather-conditions[count(preceding-sibling::start-valid-time)+1]/value/@coverage)" -n XML
Однако кажется, что все значения атрибута coverage
взяты из его первого экземпляра.
Я был бы признателен за помощь с этим!