1

そこで、使用したい Linux での xml 解析用のスクリプトをオンラインで見つけました。スクリプトがどのように機能するか、および自分で使用するために編集する方法を理解するための助けを得たいと思っていました。

これがスクリプトです(クレジット

#!/bin/bash

cat $1 | awk '

START {    pos=1;    xml=$0    len=length(xml);    endp=1 }

{    while(pos <= len)    {
      if(substr(xml,pos,7) == "<title>")
      {
         pos=pos+7;
         endp=pos;
         while((substr(xml,endp,8) != "</title>") && (endp < len))
         {
            endp++;
         }
         print "   ",substr(xml,pos,endp-pos)," * ";
         pos=endp+7;
      }
      pos++;    } }'

使用する xml データの簡単なサンプルを次に示します

タグの両側にある余分な文字を既に取り除き、スクリプトを次のように変更して、いくつかの調整を行いました。

  #!/bin/bash

    cat $1 | awk '

    START {    pos=1;    xml=$0    len=length(xml);    endp=1 }

    {    while(pos <= len)    {
          if(substr(xml,pos,16) == "<sport><![CDATA[")
          {
             pos=pos+16;
             endp=pos;
             while((substr(xml,endp,11) != "]]></sport>") && (endp < len))
             {
                endp++;
             }
             print "",substr(xml,pos,endp-pos),"";
             pos=endp+10;
          }
          pos++;    } }'

したがって、このスクリプトを使用すると、この結果を含むプレーンテキストファイルが残ります

Women's Soccer
Men's Soccer
Women's Soccer

最終的には、スクリプトに次のように出力させたいと思います

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

疑問に思っている方のために説明すると、これは解析スクリプトを呼び出すシェルです (ファイル名と場所は無視してください)。

wget -O rss.xml http://en-us.fxfeeds.mozilla.com/en-US/firefox/headlines.xml
        ~dsl/bin/rssparse! rss.xml > headlines_$$.tmp
        cd /tmp/ldmtrx
        split --lines=30 /tmp/headlines_$$.tmp ldmtrxnews
        cd /tmp
        rm headlines_$$.tmp rss.xml 

大変ありがたいのですが、誰かがこのタスクを完了してくれるとは思っていません. このスクリプトを別の要素で実行し、両方の要素を出力する方法がわかりません (たとえば<sport>、 と<homeaway>)。スクリプトを再度実行することはできますが、要素は別の行に出力されます。

<date>最後に、一致する今日の日付を持たないすべてのデータを除外する方法を知りたいです。ご協力いただきありがとうございます。

4

1 に答える 1

1

あなたの例には検証が欠けていることを知っておく必要があります。それはいくつかの微調整が必​​要です

あのペーストの代わりにこのペーストをチェック

次に、xmlstarletを使用して、このスクリプトが実行するすべてを置き換えることができます。

$ wget --output-document - http://pastie.org/pastes/4408130/download | xmlstarlet sel -t -m rss/channel/item -v sport -o ' Away @ ' -v opponent -o ' at ' -v time -na

その出力:

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

出力が必要なものである場合は、xmlstarlet で-Cを使用して、その特定の解析が必要な任意の言語でソースできる xml テンプレートを表示できます。

于 2012-08-07T22:03:14.307 に答える