« Flex Time | Main | The Silly Season »

June 29, 2005

Monad and RSS, Part 3

First, a couple of improvements in the array handling of my previous get-feeds.msh script.

The MSH language has a -contains operator, which will tell you if an array contains an element. So instead of the clunky:

$seen = $false
for ($i = 0; $i -lt $seenlist.length; ++$i) {
    if ($seenlist[$i] -eq $_.pubDate) {
        $seen = $true
        break
    }
}
if (!$seen) {

you can just say:

if (!($seenlist -contains $_.pubDate)) {

Also, to extend an array that might be empty, instead of:

if ($seenlist -eq $null) {
    $seenlist = [array]$_.pubDate
} else {
    $seenlist += $_.pubDate
}

You can do:

$seenlist += @($_.pubDate)

OK, now let's talk about output formatting. In Monad the formatting of objects is controlled by files that end in ".format.mshxml". If you look in your Monad directory (you DO have a Monad directory, right?) then you will see several files like this. You can easily add your own.

If you look inside, you will see a bunch of views for different types. If we create a new file rss.format.mshxml (and add it to filelist.format.mshxml, minor point), then we can set it up like this:

<View>
  <Name>System.Xml.XmlDocument</Name>
  <ViewSelectedBy>
    <TypeName>System.Xml.XmlDocument</TypeName>
  </ViewSelectedBy>
  <TableControl>
    <TableHeaders>
      <TableColumnHeader>
        <Label>Title</Label>
        <Width>60</Width>
      </TableColumnHeader>
    </TableHeaders>
    <TableRowEntries>
      <TableRowEntry>
        <TableColumnItems>
          <TableColumnItem>
            <ScriptBlock>$_.rss.channel.title</ScriptBlock>
          </TableColumnItem>
        </TableColumnItems>
      </TableRowEntry>
    </TableRowEntries>
  </TableControl>
</View>

Now instead of typing

write-host $rssdata.rss.channel.title

You can type:

$rssdata

It will pick up the format.mshxml information for System.Xml.XmlDocument and display only the title (and a header that says "Title").

But surely you don't want to display ANY XmlDocument this way? And what about the items? And maybe we want to use this to handle different RSS formats...all good ideas, but we'll save them for later. I'm off for 5 days of vacation. Don't bother coming by to boost our television, the kids and aunts will still be in the house.

Posted by AdamBa at June 29, 2005 11:33 PM

Trackback Pings

TrackBack URL for this entry:
http://proudlyserving.com/cgi-bin/mt-tb.cgi/258

Comments