Estou tentando produzir os valores de determinados elementos em um feed RSS como colunas. A estrutura de um feed RSS em questão é esta (abreviada):
$ xmlstarlet el ~/tmp/spotn-rss-20140323 | sort -u
rss/channel/title
rss/channel/item/content
rss/channel/item/description
rss/channel/item/link
rss/channel/item/pubDate
rss/channel/item/title
Depois de aplicar um comando xmlstarlet sel com um modelo, gostaria de ver uma lista de títulos de itens e suas datas de publicação organizados em colunas.
$ xmlstarlet sel -t \
-v rss/channel/item/title \
-v rss/channel/item/pubDate -n ~/tmp/spotn-rss-20140323
Desired output: Actual output:
title1:pubDate1 title1
title2:pubDate2 title2
title3:pubDate3 title3
(...) (...)
pubDate1
pubDate2
pubDate3
(...)
Esse problema parece bastante trivial, e achei que seria uma boa ideia verificar o guia do usuário . Ao final, o exemplo de hello world com uma folha de estilo .xls fornece meios para obter o efeito desejado com pouco esforço:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="inputFile">-</xsl:param>
<xsl:template match="/">
<xsl:call-template name="t1"/>
</xsl:template>
<xsl:template name="t1">
<xsl:for-each select="rss/channel/item">
<xsl:value-of select="title" />^<xsl:value-of select="pubDate" />;
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Eu obtenho a saída desejada com o comando transform, mas eu acho essa abordagem um tanto complicada porque o xml / xls é muito wordy . Meu objetivo é examinar rapidamente alguns elementos no xml, não quero escrever uma folha de estilo de ~ 450 caracteres apenas para isso.
$ xmlstarlet tr /home/jaroslav/tmp/spotn-rss-style.xls \
/home/jaroslav/tmp/spotn-rss-20140323 |
column -ts^
Test Thu, 20 Mar 2014 18:58:11 +0000;
Assisterende borer – Songa Offshore Thu, 20 Mar 2014 12:48:03 +0000;
Maskinsjef Thu, 20 Mar 2014 10:23:16 +0000;
Maskinsjefer/Motorpassere Sun, 16 Mar 2014 16:37:15 +0000;
Skipsfører Sun, 16 Mar 2014 16:30:19 +0000;
Tilkallingsvikarar matros Thu, 13 Mar 2014 03:15:55 +0000;
Matros Wed, 12 Mar 2014 13:05:57 +0000;
1. styrmann Tue, 11 Mar 2014 05:44:31 +0000;
Overstyrmann Scan Trans Tue, 04 Mar 2014 06:35:29 +0000;
(...)
Seria mais útil se houvesse uma maneira de concatenar dois valores de cada elemento <item>
em <channel>
em uma linha separada sem recorrer a folhas de estilo xls ou editores de fluxo externos, como sed e awk.