1

私はxmlstarletを使用したことがないので、入力と目的の出力を使用して単純に保つつもりです。投稿された回答から何かを学ぶことができれば幸いです。

入力:

<channel>
    <title>
    <link>http://www.MYDOMAIN.com/</link>
    <description></description>
    <ttl>60</ttl>
    <category>Sports</category>

        <item>
             <sport><![CDATA[Women's Soccer]]></sport>
             <opponent><![CDATA[South Carolina (Exhibition)]]></opponent>
             <location><![CDATA[Columbia, S.C.]]></location>
             <date>08/09/2012</date>
             <time>7:00 PM</time>
             <tv><![CDATA[]]></tv>
             <tournamentname><![CDATA[]]></tournamentname>
             <homeaway>A</homeaway>
        </item>     

        <item>
             <sport><![CDATA[Men's Soccer]]></sport>
             <opponent><![CDATA[Ohio State (Exhibition)]]></opponent>
             <location><![CDATA[Fort Wayne, Ind.]]></location>
             <date>08/17/2012</date>
             <time>7:00 PM</time>
             <tv><![CDATA[]]></tv>
             <tournamentname><![CDATA[]]></tournamentname>
             <homeaway>H</homeaway>
        </item>     

        <item>
             <sport><![CDATA[Women's Soccer]]></sport>
             <opponent><![CDATA[William and Mary]]></opponent>
             <location><![CDATA[Williamsburg, Va.]]></location>
             <date>08/17/2012</date>
             <time>7:00 PM</time>
             <tv><![CDATA[]]></tv>
             <tournamentname><![CDATA[]]></tournamentname>
             <homeaway>A</homeaway>
        </item>

必要な出力:

Women's Soccer Away @ South Carolina (Exhibition) at 7:00 PM
Men's Soccer Home vs Ohio State at 7:00 PM
Women's Soccer Away @ William and Mary at 7:00 PM

これを単純なデータ操作だけでなくするいくつかのこと

<date>1)現在の日付を持たないすべてのデータを削除したい

2)目的の出力からわかるように、要素のAの結果に<homeaway>「Away @」というテキストを表示し、Hタグに「Homevs」というテキストを表示したいと思います。

本当にありがとうございました。

4

1 に答える 1

4
xmlstarlet sel --text -t \
    -m '//channel[category="Sports"]/item[date="'$(date +%m/%d/%Y)'"]' \
    -v sport -o ' ' \
    --if 'homeaway="H"' -o 'Home vs' --else -o 'Away @' -b -o ' ' \
    -v opponent -o ' ' \
    -o 'at ' -v time --nl \
    /tmp/rss.xml
  • -m(または--match)はforeachループを開始します
  • -b(または--break)はendifを意味します(実際には、一般的なエンドブロックまたは閉じ中括弧です)
于 2012-08-08T14:46:23.600 に答える