Solved

MSXML RSS parsing problem

Posted on 2009-05-08
2
217 Views
Last Modified: 2013-11-11
I'm using this code to parse an RSS feed: {Delphi code}

    sCat2 := 'News & Events';
    oChannelNode               := RSSXML.selectsinglenode('rss').firstchild;
    oItemNodes := oChannelNode.selectNodes('//item[category = "'+sCat2+'"]');

    if oItemNodes.length > 0 then // oItemNodes.length is never > 3


It will only return THREE items even though I KNOW there are 4 in the XML.
Any ideas why?
The channel Node XML is posted below.

<channel>

  <SNIP>

  <item>

    <SNIP>

    <category><![CDATA[News & Events]]></category>

    <category><![CDATA[accounts payable]]></category>

    <category><![CDATA[California]]></category>

    <category><![CDATA[new update 8404]]></category>

    <category><![CDATA[New York]]></category>

    <category><![CDATA[Project Management software]]></category>

    <category><![CDATA[tax tables Arizona]]></category>

    <SNIP>

  </item>

  <item>

    <SNIP>

    <category><![CDATA[Company News]]></category>

    <category><![CDATA[News & Events]]></category>

    <category><![CDATA[certified payroll]]></category>

    <category><![CDATA[direct deposit]]></category>

    <category><![CDATA[excel time card import]]></category>

    <category><![CDATA[import job estimates]]></category>

    <category><![CDATA[magnetic media]]></category>

    <category><![CDATA[multi-state payroll]]></category>

    <category><![CDATA[subcontractor payment sheets]]></category>

    <category><![CDATA[Tra-Ser integration]]></category>

    <SNIP>

  </item>

  <item>

    <SNIP>

    <category><![CDATA[Construction Software]]></category>

    <category><![CDATA[complexities in construction]]></category>

    <category><![CDATA[construction accounting software]]></category>

    <category><![CDATA[entry level software]]></category>

    <category><![CDATA[QuickBooks]]></category>

    <SNIP>

  </item>

  <item>

    <SNIP>

    <category><![CDATA[Company News]]></category>

    <category><![CDATA[headquarters]]></category>

    <category><![CDATA[larger offices]]></category>

    <category><![CDATA[PR Newswire]]></category>

    <SNIP>

  </item>

  <item>

    <SNIP>

    <category><![CDATA[Construction Software]]></category>

    <category><![CDATA[AccuBuild]]></category>

    <category><![CDATA[commercial industrial construction company]]></category>

    <category><![CDATA[SQL database]]></category>

    <category><![CDATA[tips choosing software]]></category>

    <SNIP>

  </item>

  <item>

    <SNIP>

    <category><![CDATA[Stimulus Package & Construction]]></category>

    <category><![CDATA[AGC]]></category>

    <category><![CDATA[Arizona chapter]]></category>

    <category><![CDATA[Obama]]></category>

    <category><![CDATA[press conference]]></category>

    <category><![CDATA[Transportation Department]]></category>

    <SNIP>

  </item>

  <item>

    <SNIP>

    <category><![CDATA[News & Events]]></category>

    <category><![CDATA[AccuBuild construction software]]></category>

    <category><![CDATA[construction software modules features]]></category>

    <category><![CDATA[existing new customer]]></category>

    <category><![CDATA[free users license]]></category>

    <category><![CDATA[special discounts promotion]]></category>

    <category><![CDATA[Spring Into Summer Sale]]></category>

    <SNIP>

  </item>

  <item>

    <SNIP>

    <category><![CDATA[News & Events]]></category>

    <category><![CDATA[attendees]]></category>

    <category><![CDATA[construction industry news]]></category>

    <category><![CDATA[Construction Software]]></category>

    <SNIP>

  </item>

  <item>

    <SNIP>

    <category><![CDATA[Stimulus Package & Construction]]></category>

    <category><![CDATA[3.4 billion]]></category>

    <category><![CDATA[construction on sale]]></category>

    <category><![CDATA[economic stimulus package construction companies]]></category>

    <SNIP>

  </item>

  <item>

    <SNIP>

    <category><![CDATA[Construction Software]]></category>

    <category><![CDATA[construction companies profitable]]></category>

    <category><![CDATA[construction specific software]]></category>

    <category><![CDATA[Equipment Module]]></category>

    <category><![CDATA[generating income]]></category>

    <SNIP>

  </item>

</channel>

Open in new window

0
Comment
Question by:EddieShipman
2 Comments
 
LVL 11

Accepted Solution

by:
CraigYellick earned 500 total points
ID: 24339910
I tested your XML (after deleting all the SNIP) using MS .NET and the expression:

   //item[category='News & Events']

returns 4 item elements, not three. Reasons the expression might yield only 3 hits:

* oChannelNode does not point to the entire XML document you've indicated
* one of the item elements is not lower-case or otherwise exactly "item"
* same as the above for one of the category elements
* the category element content might not be exactly "News & Events"

Try using the following expression (which ignores the item and category element names) and see if it finds 4 items:

  //*[text()='News & Events']

You could also try the above against the RSSXML object and not oChannelNode.

0
 
LVL 26

Author Comment

by:EddieShipman
ID: 24359478
I reworked how I'm doing everything and thus am now satisfied with the results.
I get each category's feed using the ?cat=XXX&feed=rss2 url and then append the items from each into one XML document and then I am able to check for the //item[category = xxx] correctly.
Thanks for the heads up, though.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Browsing the questions asked to the Experts of this forum, you will be amazed to see how many times people are headaching about monster regular expressions (regex) to select that specific part of some HTML or XML file they want to extract. The examp…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
This is used to tweak the memory usage for your computer, it is used for servers more so than workstations but just be careful editing registry settings as it may cause irreversible results. I hold no responsibility for anything you do to the regist…

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now