<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marc Dormey &#187; json</title>
	<atom:link href="http://www.marcdormey.com/index.php/tags/json/feed" rel="self" type="application/rss+xml" />
	<link>http://www.marcdormey.com</link>
	<description>Software Finds, Programming Tutorials and Gadget Reviews</description>
	<lastBuildDate>Tue, 20 Jul 2010 14:52:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Creating a custom ValueType and Serialising with a custom JsonResult</title>
		<link>http://www.marcdormey.com/index.php/archives/creating-a-custom-valuetype-and-serialising-with-a-custom-jsonresult</link>
		<comments>http://www.marcdormey.com/index.php/archives/creating-a-custom-valuetype-and-serialising-with-a-custom-jsonresult#comments</comments>
		<pubDate>Thu, 25 Feb 2010 23:21:13 +0000</pubDate>
		<dc:creator>Marcel</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[IPhone]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[custom valuetype]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[struct]]></category>
		<category><![CDATA[system.valuetype]]></category>
		<category><![CDATA[valuetype]]></category>

		<guid isPermaLink="false">http://www.marcdormey.com/?p=300</guid>
		<description><![CDATA[When trying to serialise your model into Json you would notice the ugly way that the Microsoft JavaScriptserializer outputs dates. ie. {&#8220;d&#8221;:&#8221;\/Date(1240718400000)\/&#8221;} 
This might not be a problem when you are using JQuery or Javascript, but what if your consumer is, say, an IPhone or another device? Wouldn&#8217;t you rather stick to a platform independent [...]]]></description>
			<content:encoded><![CDATA[<p>When trying to serialise your model into Json you would notice the ugly way that the Microsoft JavaScriptserializer outputs dates. ie. {&#8220;d&#8221;:&#8221;\/Date(1240718400000)\/&#8221;} </p>
<p>This might not be a problem when you are using JQuery or Javascript, but what if your consumer is, say, an IPhone or another device? Wouldn&#8217;t you rather stick to a platform independent and recognised format?</p>
<p>The steps below might be a bit too drastic for your implementations, but follow them and you might also learn how to create your own ValueType and CustomJsonSerialiser all in one go!</p>
<p>This is what we want to accomplish. We only needed to give one converter to our CustomConverterJsonResult, but you could make this a list or even a configuration/ioc injection.</p>
<pre class="brush:csharp"> public ActionResult Index(int? id)
 {
      return new CustomConverterJsonResult (new UnixDateTimeConverter(), _repository.GetPerson(id));
 }</pre>
<p>Below is our custom ValueType. This allows you to do the following:</p>
<pre class="brush:csharp">
UnixDateTime uDateTime = DateTime.Now;
//OR
DateTime dateTime = uDateTime;
//OR > < => and even casting between them
</pre>
<pre class="brush:csharp">public struct UnixDateTime : IComparable
{
    private static DateTime _baseDateTime = new DateTime(1970, 1, 1, 0, 0, 0);
    private readonly long _epochSeconds;

    public UnixDateTime(DateTime dateTime)
    {
       _epochSeconds = ConvertToUnixEpochSeconds(dateTime) ?? 0;
    }

    public UnixDateTime(long epochSeconds)
    {
       _epochSeconds = epochSeconds;
    }

    public override bool Equals(object obj)
    {
       if (!obj.GetType().IsAssignableFrom(typeof(UnixDateTime)))
          return false;
       return ((UnixDateTime)obj)._epochSeconds.Equals(_epochSeconds);
    }

    public bool Equals(UnixDateTime other)
    {
       return other._epochSeconds.Equals(_epochSeconds);
    }

    public override int GetHashCode()
    {
       return _epochSeconds.GetHashCode();
    }

    public int CompareTo(object obj)
    {
       return _epochSeconds.CompareTo(((UnixDateTime) obj)._epochSeconds);
    }

    public override string ToString()
    {
       return _epochSeconds.ToString();
    }

    public static bool operator &gt;(UnixDateTime source, UnixDateTime target)
    {
       return source._epochSeconds &gt; target._epochSeconds;
    }

    public static bool operator &lt;(UnixDateTime source, UnixDateTime target)
    {
       return source._epochSeconds &lt; target._epochSeconds;
    }

    public static bool operator ==(UnixDateTime source, UnixDateTime target)
    {
       return source._epochSeconds == target._epochSeconds;
    }

    public static bool operator !=(UnixDateTime source, UnixDateTime target)
    {
       return source._epochSeconds != target._epochSeconds;
    }

    public static implicit operator UnixDateTime(DateTime dateTime)
    {
       return new UnixDateTime(dateTime);
    }

    public static implicit operator UnixDateTime(long value)
    {
       return new UnixDateTime(value);
    }

    public DateTime? ToDateTime()
    {
       return ConvertFromUnixEpochSeconds(_epochSeconds);
    }

    private static long? ConvertToUnixEpochSeconds(DateTime? date)
    {
       if (!date.HasValue)
          return null;

       return (long)((DateTime)date - _baseDateTime).TotalSeconds;
    }

    private static DateTime? ConvertFromUnixEpochSeconds(long? seconds)
    {
       if (!seconds.HasValue)
          return null;

       return _baseDateTime.AddSeconds(seconds.Value);
    }
}</pre>
<p>We then need a CustomConverterJsonResult. The reason for this is to inject the converters needed (no support for this in the normal JsonResult).</p>
<pre class="brush:csharp">public class CustomConverterJsonResult : JsonResult
{
    private readonly JavaScriptConverter _customConverter;

    public CustomConverterJsonResult(JavaScriptConverter customConverter, object data)
    {
       _customConverter = customConverter;
       Data = data;
    }

    public override void ExecuteResult(ControllerContext context)
    {
       if (context == null)
          throw new ArgumentNullException("context");

       HttpResponseBase response = context.HttpContext.Response;

       response.ContentType = !string.IsNullOrEmpty(ContentType) ? ContentType : "application/json";

       if (ContentEncoding != null)
          response.ContentEncoding = ContentEncoding;

       if (Data != null)
       {
          JavaScriptSerializer serializer = CreateJsonSerializer();
          response.Write(serializer.Serialize(Data));
       }
    }

    private JavaScriptSerializer CreateJsonSerializer()
    {
       var serializer = new JavaScriptSerializer();
       serializer.RegisterConverters(new []{_customConverter});
       return serializer;
    }
}</pre>
<p>And finally&#8230; the JavascriptConverter.</p>
<pre class="brush:csharp">   public class UnixDateTimeConverter : JavaScriptConverter
   {
       public override object Deserialize(IDictionary&lt;string, object&gt; dictionary, Type type,    JavaScriptSerializer serializer)
       {
          if(dictionary != null)
          {
             var stringValue = string.Empty + dictionary["UnixEpochSeconds"];
             if(string.IsNullOrEmpty(stringValue))
                return null;

             return new UnixDateTime(long.Parse(stringValue));
          }

          return null;
       }

       public override IDictionary&lt;string, object&gt; Serialize(object obj, JavaScriptSerializer serializer)
       {
          var result = new Dictionary&lt;string, object&gt; { { "UnixEpochSeconds", obj.ToString() } };
          return result;
       }

       public override IEnumerable&lt;Type&gt; SupportedTypes
       {
          get { return new ReadOnlyCollection&lt;Type&gt;(new List&lt;Type&gt;(new[] {     typeof(UnixDateTime), typeof(UnixDateTime?) })); }
       }
}</pre>
<p>This creates the following output:</p>
<pre class="brush:csharp">
{"Person":[{"Name":"John Doe","LastUpdated":[{"UnixEpochSeconds":"187653000"}]]}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.marcdormey.com/index.php/archives/creating-a-custom-valuetype-and-serialising-with-a-custom-jsonresult/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jLinq &#8211; LINQ for JSON</title>
		<link>http://www.marcdormey.com/index.php/archives/jlinq-linq-for-json</link>
		<comments>http://www.marcdormey.com/index.php/archives/jlinq-linq-for-json#comments</comments>
		<pubDate>Mon, 19 Oct 2009 10:44:55 +0000</pubDate>
		<dc:creator>Marcel</dc:creator>
				<category><![CDATA[CSS/Html]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[jlinq]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[linq2sql]]></category>

		<guid isPermaLink="false">http://www.marcdormey.com/?p=229</guid>
		<description><![CDATA[

Sometimes I stumble accross something and immediately think &#8220;where has this been all my life?&#8221;. Finding jLinq is one of those moments.
I love Language Integrated Query (LINQ) and have used it for the last couple of years. With LINQ2NHibernate, LINQ2Lucene, LINQ2Amazon and even LINQ2Twitter emerging, it is very clear that LINQ is here to stay.
Enter [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.marcdormey.com/wp-content/uploads/2009/10/jLinq.png" alt="jLinq" title="jLinq" style="float:right; margin-left:5px; margin-bottom: 5px;" /></p>
<div style="margin-top: -5px;">
Sometimes I stumble accross something and immediately think &#8220;where has this been all my life?&#8221;. Finding jLinq is one of those moments.<br />
I love Language Integrated Query (LINQ) and have used it for the last couple of years. With <a href="http://www.hookedonlinq.com/LINQToNHibernate.ashx">LINQ2NHibernate</a>, <a href="http://www.codeplex.com/linqtolucene">LINQ2Lucene</a>, <a href="http://weblogs.asp.net/fmarguerie/archive/2006/06/26/Introducing-Linq-to-Amazon.aspx">LINQ2Amazon</a> and even <a href="http://linqtotwitter.codeplex.com/">LINQ2Twitter</a> emerging, it is very clear that LINQ is here to stay.</p>
<p>Enter <a href="http://www.hugoware.net/Projects/jLinq">jLinq from Hugoware</a>&#8230;
</div>
<pre class="brush:csharp">
$.getJSON("/Person/All", function(data) {
  var results = jLinq.from(data.users)
      .startsWith("first", "a")
      .orEndsWith("y")
      .orderBy("admin", "age")
      .select();
});
</pre>
<p>You can view the basics of jLinq from this <a href="http://www.hugoware.net/Projects/jLinq/Screencast1">screencast</a>.<br />
We used jLinq to solve a very complex join operation on our JSON object and found it to be a very simple task&#8230;</p>
<pre class="brush:csharp">
  var results = jLinq.from(data.users)
    .join(data.locations, "location", "locationId", "id")
    .equals("location.state", "texas")
    .orderBy("location.city")
    .select(function(r) {
    return {
       fullname:r.first + " " + r.last,
       city:r.location.city,
       state:r.location.state
    };
});
</pre>
<p>jLinq is also very extensible and creating your own extension methods couldnt be easier&#8230;</p>
<pre class="brush:csharp">
  jLinq.extend({
    name:"startsWithLetterP",
    type:"query",
    count:0,
    method:function(q) {
        return q.helper.match(q.value, /^p/);
    }}); 

//use the new method
var results = jLinq.from(data.users)
    .startsWithLetterP("first")
    .select();
</pre>
<p>So why wait another minute, head off to experiment <a href="http://www.hugoware.net/Projects/jLinq">here </a> right now!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcdormey.com/index.php/archives/jlinq-linq-for-json/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Update Form Fields with JSON result in ASP.NET MVC</title>
		<link>http://www.marcdormey.com/index.php/archives/update-form-fields-with-json-result-in-asp-net-mvc</link>
		<comments>http://www.marcdormey.com/index.php/archives/update-form-fields-with-json-result-in-asp-net-mvc#comments</comments>
		<pubDate>Mon, 05 Oct 2009 10:28:21 +0000</pubDate>
		<dc:creator>Marcel</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[properties]]></category>

		<guid isPermaLink="false">http://www.marcdormey.com/?p=217</guid>
		<description><![CDATA[Wouldn&#8217;t it be nifty to receive a JSON result object from AJAX and it automagically updates your form fields? Those who said &#8220;No&#8221; leave now!
I had to find a way to iterate through my JSON properties and, if I named the fields the same as the JSON properties, update them all in one go.
Lets use [...]]]></description>
			<content:encoded><![CDATA[<p>Wouldn&#8217;t it be nifty to receive a JSON result object from AJAX and it automagically updates your form fields? Those who said &#8220;No&#8221; leave now!<br />
I had to find a way to iterate through my JSON properties and, if I named the fields the same as the JSON properties, update them all in one go.</p>
<p>Lets use a simple &#8220;Person&#8221; model and have a look at the ASP.NET MVC action:</p>
<pre class="brush:csharp">
public ActionResult GetPerson(int id)
{
    var person = Context.GetPerson(id);
    return Json(new
                    {
                        success = true,
                        model = new
                                    {
                                        person.Id,
                                        person.Name,
                                        person.Surname,
                                        person.Age,

                                    }
                    });
}
</pre>
<p>As you can see this returns a DTO (data transfer object) as JSON result and is ready to be consumed via AJAX&#8230;</p>
<pre class="brush:js">
$.getJSON("/Person/1", function(data) {
    if (data.success) {
        $.updateForm(data.model);
    } else {
        alert("An error occurred");
    }
});
</pre>
<p>All we then need is the magical &#8220;$.updateForm&#8221; method that contains all the voodoo:</p>
<pre class="brush:js">
jQuery.updateForm = function(model) {
   // we iterate through all the properties
   for (var property in model) {
        // evaluate the expression to get the value
        var propertyValue = eval("model." + property);
        // and update the field
        $("#" + property).val(propertyValue);
    }
};
</pre>
<p>Currenty this will work fine for textboxes and textareas as this was all the functionality I needed for now. If anyone extends this for &#8220;select&#8221;, &#8220;checkbox&#8221;, &#8220;radiobutton&#8221; etc&#8230; please share with us so I can update this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcdormey.com/index.php/archives/update-form-fields-with-json-result-in-asp-net-mvc/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Splitting your dynamic unordered list into columns</title>
		<link>http://www.marcdormey.com/index.php/archives/splitting-your-dynamic-unordered-list-into-columns</link>
		<comments>http://www.marcdormey.com/index.php/archives/splitting-your-dynamic-unordered-list-into-columns#comments</comments>
		<pubDate>Mon, 07 Sep 2009 17:22:01 +0000</pubDate>
		<dc:creator>Marcel</dc:creator>
				<category><![CDATA[CSS/Html]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[list]]></category>
		<category><![CDATA[ul]]></category>

		<guid isPermaLink="false">http://www.marcdormey.com/?p=122</guid>
		<description><![CDATA[The easiest way to split your unordered list into columns is by assigning css classes.
&#60;ul&#62;
&#60;li class="left"&#62;Item 1&#60;/li&#62;
&#60;li class="left"&#62;Item 2&#60;/li&#62;
&#60;li class="right_first"&#62;Item 3&#60;/li&#62;
&#60;li class="right"&#62;Item 4&#60;/li&#62;
&#60;/ul&#62;
.left {
margin-left: 0px;
}

.right {
margin-left: 50%;
}

.right_first {
margin-top: -40px;
}
If you know the size of the list then you can play around with the top margin of the &#8220;right_first&#8221; class. In our case, we do not [...]]]></description>
			<content:encoded><![CDATA[<p>The easiest way to split your unordered list into columns is by assigning css classes.</p>
<pre class="brush:xml">&lt;ul&gt;
&lt;li class="left"&gt;Item 1&lt;/li&gt;
&lt;li class="left"&gt;Item 2&lt;/li&gt;
&lt;li class="right_first"&gt;Item 3&lt;/li&gt;
&lt;li class="right"&gt;Item 4&lt;/li&gt;
&lt;/ul&gt;</pre>
<pre class="brush:css">.left {
margin-left: 0px;
}

.right {
margin-left: 50%;
}

.right_first {
margin-top: -40px;
}</pre>
<p>If you know the size of the list then you can play around with the top margin of the &#8220;right_first&#8221; class. In our case, we do not know the size of the list, so we would have to do some black magic&#8230;</p>
<pre class="brush:js">// First we calculate some variables
// the minimum column length (items / 2) at which to split into columns
var columnSplitLength = 7;
// the current would be column length
var currentColumnLength = Math.round(items.length / 2);
// is the items an odd or even length
var isOdd = (items.length &gt; 2) != currentColumnLength;
// should we split the columns?
var shouldSplitColumns = currentColumnLength &gt; columnSplitLength; 

var count = 1; var myLiHeight = 13; // height of each ListItem

$.each(items, function() {
    var className = shouldSplitColumns &amp;&amp;  (count &gt; currentColumnLength) ? "right":"left";
    if(count == currentColumnLength+1)
        className = "right_first";
    var resultRow = $.stringFormat("&lt;li class='{0}'&gt;{1}&lt;/li&gt;", [className, this.name]);
    $(resultRow).appendTo("#myUlList");
    count++;
});

// If the list length is odd, we have to add a phantom item to the right to balance
if(isOdd) {
 $("&lt;li class='right'&gt;&lt;/li&gt;").appendTo("#myUlList");
count++;
}
// Lastly, reset the first item of the right column to the top
$(".right_first").css("margin-left", "50%");
$(".right_first").css("margin-top", "-"+count*myLiHeight+"px");</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.marcdormey.com/index.php/archives/splitting-your-dynamic-unordered-list-into-columns/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Populating an ordered- or unordered list with JQuery via JSON</title>
		<link>http://www.marcdormey.com/index.php/archives/populating-a-ul-or-ol-list-via-json-result</link>
		<comments>http://www.marcdormey.com/index.php/archives/populating-a-ul-or-ol-list-via-json-result#comments</comments>
		<pubDate>Mon, 07 Sep 2009 16:02:12 +0000</pubDate>
		<dc:creator>Marcel</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[list]]></category>

		<guid isPermaLink="false">http://www.marcdormey.com/?p=111</guid>
		<description><![CDATA[Loading dynamic data into an ordered- or unordered list cannot be simpler.
First we create a template for each LI row:
var listRow = "&#60;li id=\"{0}\"&#62;{1}&#60;/li&#62;";
Then we call the ajax method and handle the JSON results:
// Now using my $.stringFormat method
// (see tag 'string format')
// we append the template with the correct values to the ul or [...]]]></description>
			<content:encoded><![CDATA[<p>Loading dynamic data into an ordered- or unordered list cannot be simpler.</p>
<p>First we create a template for each LI row:</p>
<pre class="brush:js">var listRow = "&lt;li id=\"{0}\"&gt;{1}&lt;/li&gt;";</pre>
<p>Then we call the ajax method and handle the JSON results:</p>
<pre class="brush:js">// Now using my $.stringFormat method
// (see tag 'string format')
// we append the template with the correct values to the ul or ol
$.getJSON("http://somedomain/getsomedata", function(data, status) {
   $.each(data, function() {
   var listRowPopulated = $.stringFormat(listRow, [this.id, this.title]);
      $(listRowPopulated).appendTo("#someul");
    });
});</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.marcdormey.com/index.php/archives/populating-a-ul-or-ol-list-via-json-result/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JQuery function to populate a select box</title>
		<link>http://www.marcdormey.com/index.php/archives/jquery-function-to-populate-a-select-box</link>
		<comments>http://www.marcdormey.com/index.php/archives/jquery-function-to-populate-a-select-box#comments</comments>
		<pubDate>Fri, 04 Sep 2009 11:52:48 +0000</pubDate>
		<dc:creator>Marcel</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.marcdormey.com/?p=34</guid>
		<description><![CDATA[Something you might be repeating while building a user interface is populating a select box with JSON results. Here is a quick demonstration on a very simple way to do this. Put the &#8216;populateSelect&#8217; method in a global .js file and use it throughout your project as &#8216;$.populateSelect(args&#8230;)&#8217;
ASP.NET MVC Action Method
public ActionResult GetUsers()
{
   [...]]]></description>
			<content:encoded><![CDATA[<p>Something you might be repeating while building a user interface is populating a select box with JSON results. Here is a quick demonstration on a very simple way to do this. Put the &#8216;populateSelect&#8217; method in a global .js file and use it throughout your project as &#8216;$.populateSelect(args&#8230;)&#8217;</p>
<p>ASP.NET MVC Action Method</p>
<pre class="brush:csharp">public ActionResult GetUsers()
{
     var data = Service.QueryUsers()
           .Select(x =&gt; new {value = x.Id, text = x.Name});

      return Json(data);
}</pre>
<p>Usage:</p>
<pre class="brush:js">var url = "&lt;%=Url.Action("GetUsers", "UserController") %&gt;";

$.getJSON(url, function(data, textstatus) {
        $.populateSelect("#someSelectBox", data);
});
</pre>
<p>Global Method:</p>
<pre class="brush:js">
// JQuery Method
jQuery.populateSelect = function(selectId, data) {
    $.each(data, function() {
        var option = new Option(this.text, this.value);
        var dropdownList = $(selectId)[0];
        if ($.browser.msie) {
            dropdownList.add(option);
        } else {
            dropdownList.add(option, null);
        }
    });
};</pre>
<p>Removing all Items from a select list is just as simple:</p>
<pre class="brush:js">
$("#mySelectList")
   .find("option")
   .remove();
</pre>
<p>And lastly how to Append or Prepend items to the list:</p>
<pre class="brush:csharp">
// Add options to the end of a select
$("#mySelectList")
    .append("<option value='1'>New Item</option>");

// Add options to the start of a select
$("#mySelectList")
    .prepend("<option value='0'>Select...</option>");
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.marcdormey.com/index.php/archives/jquery-function-to-populate-a-select-box/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
