所以,我将使用 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 中编写了某种 sekeleton 代码(尽管我仍然没有弄清楚 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}'
}
我不知道之后该怎么办:|
提前感谢您的解决方案/答案/等
编辑:我最近才发现如何分离输出,现在关于如何以 ${} 格式存储它的问题仍然是一个问题