0

そこで、 xmlstarlet を xml パーサーとして使用し、wget を rss ダウンローダーとして使用して、bashで rssスクレーパーを作成します (wget の部分は完了したので、質問はありません)。それをフィードし、次の形式で保存します:$ {channel}など(echo -e形式で保存しました(つまり、stdoutとして表示します)。フィード内の各アイテムを次のように解析したいと思いますXMLStarlet をダウンロードして、${channel} などの形式で保存します)。要するに、C# で次のようなことを行います。

//ignore the classes, they're just illustrations    
public class RSSClass
    {
        public string Title { get; set; } //definition
        public string PubDate { get; set; }
    }
    
    
    void myRSS_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{

        var rssData = from rss in XElement.Parse(e.Result).Descendants("item")
           

         select new RSSClass
                    {
                        Title = rss.Element("title").Value,   //this stores the value in <title/> in the respective string named Title
                        PubDate = rss.Element("pubDate").Value  //this is also done the same thing 
                    };

}

そして、bashが何であるかわからないので、bashで同じことを行う方法がわかりません(私はbashが本当に初めてです)

更新:私はbashである種のセケレトンコードを書きました(ただし、bash xmlの解析はまだわかりませんでした):

#!/bin/bash

RSS_URI="http://rss.detik.com/index.php/hot"
XPATH_MATCH=/rss/channel/item
XPATH_VALUE="concat(pubDate,' | ',title,'\n')"
RSS_DATA="data.xml"
${channel}
${pubdate}
${title}
${link}

DOWNLOAD_AND_PARSE ()   #Downloads and parses RSS [SKELETON]
{
    wget -O RSS_DATA RSS_URI
    echo -e "$(~/bin/xml sel --net -t -m "$XPATH_MATCH" -v "$XPATH_VALUE" "$RSS_DATA")" | awk -F "|" '{print $1 $2}'   
}

後はどうすればいいのかわからない :|

あなたの解決策/回答/などを前もって感謝します

編集:出力を分離する方法を最近見つけたばかりですが、${} 形式で保存する方法についてはまだ問題があります

4

0 に答える 0