- Table of Contents
- .NET Book Recommendations
- What Is .NET?
- The Microsoft .NET Framework
- The Common Language Runtime (CLR), the Common Type System (CTS), and the Common Language Specification (CLS)
- .NET Framework Class Library
- Visual Studio .NET
- .NET Enterprise Servers and .NET My Services
- .NET Compliant Languages
- C#
- Visual Basic .NET (VB .NET)
- ASP.NET
- XML Web Services
- ADO.NET
- XML.NET
- Windows Forms
- Why .NET?
- Displaying Errors with the Error Provider
- COM Interoperability
- Comparing Java and .NET
- Calling Unmanaged Code
- .NET Application Security
- Code Access Security
- .NET Standards Support
- Numeric Types in the .NET Framework
- Working with Strings
- Formatting Strings
- Trimming Character Strings
- Comparing Strings in .NET 2.0
- Arrays and Collections
- Arrays as Class Members
- Sorting a Multi-Dimensional Array
- Sorting a Multi-Dimensional Array with LINQ
- File I/O (System.IO)
- Working with File Names
- Using the File System
- Working with Files and Directories
- Monitoring the File System
- Working with Streams
- Working with Text Encodings
- Working with Date and Time
- Extending the DateTime Class
- Fun with Dates
- Exceptions
- Delegates
- Events
- Asynchronous Programming
- Asynchronous File I/O
- Timers
- Random Numbers
- Cryptographically Secure Random Numbers
- Serialization
- MultiThreading (System.Threading)
- Multi-Threading Overview
- The Managed Thread Pool
- Managed Threading
- Thread Synchronization
- Synchronizing Data Access
- Trace Debugging
- Tracing in .NET 2.0
- ASP.NET Trace
- Validating User Input in ASP.NET Web Pages
- Event Logging
- Monitoring Application Performance
- Accessing the Registry
- Accessing Environment Information
- Environment Variables in .NET 2.0
- Managing Windows Forms Applications
- Working with Email
- Working with Graphics
- Animating a Background
- Working with Images
- Drawing Cycloid Curves
- Simulating the Spirograph
- Building International Web Applications
- .NET Compact Framework
- Mobile Web Development with ASP.NET
- Speech Technologies
- Microsoft MapPoint Web Service
- Working with Typed DataSets
- Using Relationships in DataSets
- DataColumn Expressions
- Playing Simple Sounds
- Playing Sounds with .NET 2.0
- Returning an Image in a Web Page
- RSS
- Best Practices Project Structure
- Best Practices Application Blocks
- The Data Access Application Block
- The Exception Management Application Block
- Best Practices — Performance
- Best Practices — Performance and Scalability
- Best Practices - Testing
- Reading the Tea Leaves, 2005
- Predictions: A Look Back at 2005, and a Look Ahead to 2006
- .NET Downloads
- Application Deployment Overview
- Application Deployment — Versioning
- Application Deployment — Version Policy
- Application Deployment — Packaging and Distribution
- .NET Remoting Overview
- A Remoting Demonstration
- Remoting Configuration
- Remoting: Lifetimes and Leases
- Remoting: Other Issues
- Attributes
- Writing Custom Attributes
- Accessing Attributes in Code
- Reflection
- Class Design: Inheritance, Interface, or Composition?
- The TriTryst Game
- Console Applications in .NET 2.0
- New File I/O Methods in .NET 2.0
- Building Projects with MSBuild
- Unmanaged Callbacks in .NET 2.0
- Timer Troubles
- Non-Rectangular Windows Forms
- Windows Forms Transparency
- 10 Things I Hate About Visual Basic
- 10 Things I Hate About C#
- Background Processing with Idle Time
- Scaling Windows Forms
- Reading and Writing Binary Data
- New Memory Management Functions in .NET 2.0
- Compatibility Between .NET 1.1 and .NET 2.0
- Managed Debugging Assistants in .NET 2.0
- XDir: A Program for Viewing Directory Sizes
- The Microsoft.VisualBasic Namespace
- Operator Overloading
- Working with GPS Data
- Hidden Visual Studio Tools
- .NET 3.0
- The .NET 2.0 Stopwatch Class
- Nullable Types
- Drawing Rotated Text
- Unsafe Code
- Other .NET Languages
- Compiler Directives
- Safe Handles
- Predictions, 2007 Edition
- New Features in C# 3.0
- Generics
- Network Client Programming
- On the Misuse of Exceptions
- Maximum Object Size in .NET
- More on Maximum Object Sizes
- Keyed Collection Memory Limitations
- Matching String Endings
- Allocating Small Data Structures
- Grumbling About Limitations
- Some Thoughts on the Nature of What We Do
- Working with Predicates in Collections
- Working with DataReaders
- Outputting XML with XmlWriter
- Writing XML Data
- Working with Compression
- Another Look at Compressed Streams
- Compressing a Very Large File
- Canonical URIs
- Constructing URIs
- Using OneWayAttribute for Remote Calls
- Selecting a Garbage Collector
- Linked List
- Linked List Application - The MRU List
- Auto-implemented Properties in C#
- The HashSet Collection
- Looking Ahead: 2018
- An Experiment in Optimization
- A Larger Integer
- Extension Methods
- Language Integrated Query (LINQ)
- Variable Length Parameter Lists
- The ReaderWriterLockSlim Synchronization Primitive
- Sorting a Text File
- Sorting a Large Text File
- Using ListView with Large Data Sets
- LINQ One-Liners
- Regular Expression Optimization
- Random File I/O
- Computing the Size of a Structure
- More on Computing Structure Sizes
- UnmanagedMemoryStream
- Dynamically Loading Code
- Building a String Table
- Delegates Versus Function Pointers
- Visual Studio Editor Features
- A Simple Profile Timer
- New Features in C# 4.0
- IEnumerator or IList?
- New Features in .NET 4.0
- Set Operations with IEnumerable and HashSet
- Using File Locks
- Extending Object Functionality
- Clearing a HashSet
- When Hash Codes Matter
- Parsing Command Line Options
- Creating a Single-Instance Program
- Asynchronous Windows Forms Events
- The BackgroundWorker Component
- Fixing a Dumb Mistake
- Thinking About Multi-Threaded Programs
- JavaScript Object Notation
- Useful .NET-related Sites
- Markov Models
- Building an Order 0 Markov Model
- Higher Order Markov Models
- Webmaster's Guide to robots.txt
- An Overview of the Parallel Extensions to .NET
- Parallel Extensions Synchronization Objects
- Thread Safe Collections
- A Bug and a Conundrum
- Another Bug and an Answer
- Task Parallel Library
- Good and Bad Ideas in C#
- Parallel LINQ
- Copying Large Files
- Replacing File.Copy
- Learning from Our Mistakes
- Symbolic Links
- There Is No Easy Fix
- Tracking Hurricanes
- Examining Hurricane Data
- Searching for Multiple Strings
- Simple JSON Processing
- Aho-Corasick String Searching
- Writing a Web Crawler
- Web Crawler Politeness
- Source Control Management
- Subversion
- Communicating with Datagrams
- Fun with Actions and Funcs New
- The Future of Media
- The Importance of Metadata
- Of Comparison and IComparer
- IComparer, Comparer, IComparable, Oh My!
- Comparing Generic Types New
- A Simple HTTP Server New
- Informit Reference Library
RSS
Last updated Jan 6, 2005.
The original meaning of the acronym RSS was Really Simple Syndication. It described an XML format for publishing Web site summaries. The idea was to publish a summary of a Web site's contents in a small XML document that users could download and view. After viewing the summary, the user could choose to view the entire site. This format was (and is) especially useful for viewing summaries of news articles and other content (like blogs) that changes quickly.
RSS became very popular with the explosion of blogging beginning in late 1999 or 2000. By then, the format had been extended in several ways, and two competing and almost compatible formats had emerged. Those formats are commonly referred to as RSS 2.0 (http://blogs.law.harvard.edu/tech/rss) and RDF, or RSS 1.0 (http://web.resource.org/rss/1.0/spec). RSS 2.0 is the format defined by the original author and frozen at version 2.0. The author will not be extending that format. RDF is very similar to RSS, and continues to be developed. There is much bad blood between the two camps.
Atom (http://www.atomenabled.org/developers/syndication/atom-format-spec.php) is a new format, still in development but widely used, that is an attempt to unify the camps and provide a single syndication format for the Web. It is gaining ground, but it's likely that many sites will continue to use RSS or RDF for some time to come.
Having three different formats makes for some interesting problems, not only for publishers who want to reach the widest possible audience, but also for those of us who want to write programs that will read the site summaries.
A typical RSS feed
An RSS feed is a simple XML document that consists of a header (channel) and one or more items. The items are usually HTML summaries (teasers) of articles that are on the associated Web site, although many feeds include the entire article. For example, here's a subset of the RSS feed for the .NET Reference Guide:
<rss version="0.91"> <channel> <title>InformIT :: .NET Reference Guide</title> <link>http://www.informit.com</link> <description>The latest weblog and content updates for the InformIT-.NET Reference Guide</description> <language>en-us</language> <copyright>Copyright 2004 Pearson Education, Inc. InformIT Division.</copyright> <item> <title>Blog :: String comparison madness</title> <link>http://www.informit.com/discussion/index.asp?postid=8b937bcf-0c95-430b-bafe-b8bdd5606f89&f1=rss</link> </item> <item> <title>Blog :: Updating a table through a DataView</title> <link>http://www.informit.com/discussion/index.asp?postid=b78802ea-a746-4c5c-a1da-a02bad83c31d&f1=rss</link> </item> <item> <title>Blog :: Upcoming Visual Basic language changes</title> <link>http://www.informit.com/discussion/index.asp?postid=71c39b98-2251-4531-9847-d0fb62b502e0&f1=rss</link> </item> </channel> </rss>
This is an RSS 0.91 feed, which is compatible with RSS 2.0. The items in this feed contain only the title and a link to the full article. Items in other feeds will include a date and also a description, which is the article or article summary. For an example, here's an extract of the feed for my personal blog:
<rss version="2.0">
<channel>
<title>Jim Mischel</title>
<link>http://www.mischel.com</link>
<description>Jim Mischel's Personal Web Site</description>
<pubDate>Sun, 02 Jan 2005 12:14:33 CDT</pubDate>
<language>en-us</language>
<copyright>Copyright 1997-2004, Jim Mischel.</copyright>
<managingEditor>jim@mischel.com</managingEditor>
<webMaster>jim@mischel.com</webMaster>
<item>
<title>Final century of the year</title>
<link>http://www.mischel.com/diary/2004/12/31.htm</link>
<pubDate>Fri, 31 Dec 2004 15:26:11 CDT</pubDate>
<description>
<![CDATA[<p>In keeping with my recently acquired habit of putting things off to the last possible minute, today I completed my last century ride of the year. As I mentioned previously, I set a goal at the beginning of the year to do at least one century ride per month. Today's ride, difficult as it was, completed that. I haven't been training much since October, so I struggled through the ride.</p>
<p>All told, I made 14 century rides over the year: one each month, with two extra in March. The longest ride was 136 miles (first day of <a href="http://www.mischel.com/mma/skiride2004/index.htm">my trip to Harlingen</a> in March), and the shortest was 98 miles (the last day of the trip).</p>
<p>Just for the record, I won't be making that commitment next year although I will be training for another ride to Harlingen. This time I'll have more company: possibly a half dozen people making the full ride with me, and a dozen or more making the last day. It should prove interesting.</p>]]>
</description>
</item>
</channel>
</rss>
This, too, is an RSS format document. The Atom format is similar, although it differs in the particulars.
Creating and reading RSS feeds in .NET
Creating an RSS feed in a .NET program is pretty easy: just create a new XML document and then build the feed in the document. That works great if all you want is to publish some information to the Web. Reading feeds, too, is quite easy, although parsing out the individual fields is quite tedious. Still, if you have very simple needs, the low-budget approach of using the .NET Framework's XmlDocument class is sufficient.
If you want to manipulate RSS feeds and items, though, you need to create a full-blown .NET class. Things get trickier in a hurry. When I started working with syndication formats, I started writing my own RSS and Atom formats, but soon found myself bogged down in the details of the classes rather than in the details of what I wanted to do with the information. At that point I started searching for alternatives.
There are many different RSS and Atom class libraries available to .NET programmers. Most of them are written in C#, and they vary in their capabilities and quality. After quite a bit of research, I've settled on two class libraries, both free and written in C#, that appear to be quite good although certainly not flawless: RSS.NET and Atom.NET.



Account Sign In
View your cart