Step 1: Converting Data to XML:
So, given the photos of the list:
var photoXml = new XElement("photos",
new XElement("album",
new XAttribute("albumId", albumId),
new XAttribute("albumName", albumName),
new XAttribute("modified", DateTime.Now.ToUniversalTime().ToString("r")),
from p in photos
select
new XElement("photo",
new XElement("id", p.PhotoID),
new XElement("caption", p.Caption),
new XElement("tags", p.StringTags),
new XElement("albumId", p.AlbumID),
new XElement("albumName", p.AlbumName)
)
)
);
Step 2. Run XML through some XSLT:
Then, using something like the following, execute through some XSLT , where xslPath is the path to your XSLT, current is the current HttpContext
var xt = new XslCompiledTransform();
xt.Load(xslPath);
var ms = new MemoryStream();
if (null != current){
var xslArgs = new XsltArgumentList();
var xh = new XslHelpers(current);
xslArgs.AddExtensionObject("urn:xh", xh);
xt.Transform(photoXml.CreateNavigator(), xslArgs, ms);
} else {
xt.Transform(photoXml.CreateNavigator(), null, ms);
}
ms.Seek(0, SeekOrigin.Begin);
var byteArray = new byte[ms.Length];
ms.Read(byteArray, 0, byteArray.Length);
var uniEncoding = new UTF8Encoding();
var charArray = new char[uniEncoding.GetCharCount(
byteArray, 0, byteArray.Length)];
uniEncoding.GetDecoder().GetChars(
byteArray, 0, byteArray.Length, charArray, 0);
var sb = new StringBuilder();
sb.Append(charArray);
return sb.ToString();
, "BuildPhotoStream".
"XslHelpers" :
public class XslHelpers{
private readonly HttpContext current;
public XslHelpers(HttpContext currentContext){
current = currentContext;
}
public String ConvertDateTo822(string dateTime){
DateTime original = DateTime.Parse(dateTime);
return original.ToUniversalTime()
.ToString("ddd, dd MMM yyyy HH:mm:ss G\"M\"T");
}
public String ServerName(){
return current.Request.ServerVariables["Server_Name"];
}
}
, XSLT .
3. XML :
"BuildPhotoStream" "RenderHelpers.Photos" "RenderHelpers.LatestPhotos", Linq2Sql aspx ( , ASHX, , ):
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "application/rss+xml";
ResponseEncoding = "UTF-8";
if (!string.IsNullOrEmpty(Request.QueryString["AlbumID"]))
{
Controls.Add(new LiteralControl(RenderHelpers
.Photos(Server.MapPath("/xsl/rssPhotos.xslt"), Context)));
}
else
{
Controls.Add(new LiteralControl(RenderHelpers
.LatestPhotos(Server.MapPath("/xsl/rssLatestPhotos.xslt"), Context)));
}
}
:
http://www.doodle.co.uk/Albums/Rss.aspx?AlbumID=61
Cooliris/PicLens, , , , , : (
, XSLT :
http://www.doodle.co.uk/xsl/rssPhotos.xslt
, , ( Visual Studio - FF , xmlns: atom = "http://www.w3.org/2005/Atom" xmlns: media = "http://search.yahoo.com/mrss" ).