rdf:RDF XML in Flex DataGrid

I am trying to code a flex application to show an rss feed.  
the feed looks like this
<?xml version="1.0" encoding="ISO-8859-1"?>

<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<item rdf:about="">
<title>Christmas! </title>
<link>http://somelink.com</link>
</item>
</rdf:RDF>

i tried using
dataProvider="{cl.lastResult.rdf.item}"

to populate my datagrid but it is not populating

i think the rdf:RDF is screwing something up
LVL 1
jduawaAsked:
Who is Participating?
 
Gary BenadeCommented:
Here is working source, amongst other things the rss feed with the search you were calling was returning html so you'll have to check that

Regards
Gary
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<mx:Script>
		<![CDATA[
			import mx.rpc.events.ResultEvent;
			import mx.rpc.events.FaultEvent;
			import mx.controls.Alert;
			
			[Bindable]
			public var clURL:String;
			[Bindable]
			public var clResults:Object;
			
			public function setURL(city:String):String{
				this.clURL="http://"+city+".craigslist.org/sss/index.rss";
				//Alert.show(clURL);
				return this.clURL;
			}
			
	        public function handleXML(event:ResultEvent):void
            {
               clResults = event.result.RDF.item;
               this.t.text=clResults.toString();
            }
 
	        public function handleFault(event:FaultEvent):void
	        {
	           Alert.show(event.fault.faultString, "Error");
	        }
		]]>
	</mx:Script>
	<mx:HTTPService id="craigslist_xml" url="{clURL}" resultFormat="object" showBusyCursor="true" result="handleXML(event);" fault="handleFault(event);"/>
	<mx:Label x="32" y="27" text="Search Term" id="L1" enabled="true"/>
	<mx:TextInput x="115" y="25" id="clSearchStr"/>
	<mx:Button x="32" y="144" label="Search" id="B1" click="craigslist_xml.send()" />
	<mx:CheckBox x="32" y="66" label="Denver" id="denver" click="setURL(this.denver.id)"/>
	<mx:CheckBox x="32" y="92" label="Chicago" id="chicago" click="setURL(this.chicago.id)"/>
	<mx:CheckBox x="32" y="118" label="Portland" id="portland" click="setURL(this.portland.id)"/>
	<mx:DataGrid x="32" y="184" width="702" height="288" dataProvider="{clResults}">
		<mx:columns>
			<mx:DataGridColumn headerText="Post Title" dataField="title"/>
			<mx:DataGridColumn headerText="Link" dataField="link"/>
		</mx:columns>
	</mx:DataGrid>
	<mx:TextArea x="301" y="10" width="433" height="166" id="t" wordWrap="true" editable="true" enabled="true" />
</mx:Application>

Open in new window

0
 
jduawaAuthor Commented:
here iss my datagrid
<mx:DataGrid x="32" y="184" width="702" height="288" dataProvider="{cl.lastResult.rdf.item}">
		<mx:columns>
 
			<mx:DataGridColumn headerText="Post Title" dataField="title"/>
			<mx:DataGridColumn headerText="Link" dataField="link"/>
		</mx:columns>
	</mx:DataGrid>

Open in new window

0
 
Siva Prasanna KumarPrincipal Solutions ArchitectCommented:
Try

dataProvider="{cl.lastResult..item}"
0
How do you know if your security is working?

Protecting your business doesn’t have to mean sifting through endless alerts and notifications. With WatchGuard Total Security Suite, you can feel confident that your business is secure, meaning you can get back to the things that have been sitting on your to-do list.

 
jduawaAuthor Commented:
that is the complete code...i changed it up a little bit after looking at some examples but it still isnt working...
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<mx:Script>
		<![CDATA[
			import mx.rpc.events.ResultEvent;
			import mx.rpc.events.FaultEvent;
			import mx.controls.Alert;
			
			[Bindable]
			public var clURL:String;
			public var clResults:XML;
			
			public function setURL(city:String):String{
				this.clURL="http://"+city+".craigslist.org/search/sss?query="+clSearchStr.text+"&format=rss";
				//Alert.show(clURL);
				return this.clURL;
			}
			
	        public function handleXML(event:ResultEvent):void
            {
               clResults = event.result as XML;
               this.t.text=clResults.toString();
            }
 
	        public function handleFault(event:FaultEvent):void
	        {
	           Alert.show(event.fault.faultString, "Error");
	        }
		]]>
	</mx:Script>
	<mx:HTTPService id="craigslist_xml" url="{clURL}" resultFormat="e4x" showBusyCursor="true" result="handleXML(event);" fault="handleFault(event);"/>
	<mx:Label x="32" y="27" text="Search Term" id="L1" enabled="true"/>
	<mx:TextInput x="115" y="25" id="clSearchStr"/>
	<mx:Button x="32" y="144" label="Search" id="B1" click="craigslist_xml.send()" />
	<mx:CheckBox x="32" y="66" label="Denver" id="denver" click="setURL(this.denver.id)"/>
	<mx:CheckBox x="32" y="92" label="Chicago" id="chicago" click="setURL(this.chicago.id)"/>
	<mx:CheckBox x="32" y="118" label="Portland" id="portland" click="setURL(this.portland.id)"/>
	<mx:DataGrid x="32" y="184" width="702" height="288" dataProvider="{clResults}">
		<mx:columns>
			<mx:DataGridColumn headerText="Post Title" dataField="title"/>
			<mx:DataGridColumn headerText="Link" dataField="link"/>
		</mx:columns>
	</mx:DataGrid>
	<mx:TextArea x="301" y="10" width="433" height="166" id="t" wordWrap="true" editable="true" enabled="true" />
</mx:Application>

Open in new window

0
 
jduawaAuthor Commented:
ideally i  would like for the user to be able to click multiple locations and append the results to the datagrid.  I am just learning Flex so alot of this is new to me.
Thanks
0
 
Gary BenadeCommented:
Scanning the rss output it looks like you should change your DP to:
dataProvider="{craigslist_xml.lastResult.rdf:RDF.item}"

This thread has a working rss reader, it also solves the security problem:
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/Flex/Q_22910937.html
0
 
jduawaAuthor Commented:
the compiler didnt like the rdf:RDF when i tried it
0
 
jduawaAuthor Commented:
what you provided is for the rss.
what i am looking for is the rss of the resulting search from craigslist.
which is not the URL you are using.

when i use
this.clURL="http://"+city+"craigslist.org/search/sss?query="+this.clSearchStr.text+"&format=rss";

i get an XML parser error
0
 
jduawaAuthor Commented:
0
 
Gary BenadeCommented:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
      <mx:Script>
            <![CDATA[
                  import mx.utils.StringUtil;
                  import mx.rpc.events.ResultEvent;
                  import mx.rpc.events.FaultEvent;
                  import mx.controls.Alert;
                  
                  [Bindable]
                  public var clResults:Object;
                  
                  public function go():void
                  {
                        this.clSearchStr.text = mx.utils.StringUtil.trim(this.clSearchStr.text);
                        if( this.clSearchStr.text.length == 0)
                          Alert.show("Enter a search phrase", "Search");                              
                        else
                        {
                              craigslist_xml.url = "http://" + svrGrp.selectedValue + ".craigslist.org/search/sss?query=" + encodeURI( this.clSearchStr.text) + "&format=rss";
                              craigslist_xml.send();
                        }
                  }
                  
              public function handleXML(event:ResultEvent):void
            {
                  try
                  {
                        if( event.result.RDF.item == null)
                        {
                              clResults = null;                              
                                    Alert.show("Your query returned no results", "Search");                              
                        }
                        else
                        {
                                 clResults = event.result.RDF.item;
                                      this.t.text=clResults.toString();
                        }
                   }
                   catch( e:*)
                   {
                         this.t.text = e.message;
                   }            
            }
              public function handleFault(event:FaultEvent):void
              {
                 Alert.show(event.fault.faultString + "\r\n" + craigslist_xml.url, "Error");
              }
            ]]>
      </mx:Script>
      <mx:HTTPService id="craigslist_xml" concurrency="last" resultFormat="object" showBusyCursor="true" result="handleXML(event);" fault="handleFault(event);"/>
      <mx:Label x="32" y="27" text="Search Term" id="L1" enabled="true"/>
      <mx:TextInput x="115" y="25" id="clSearchStr"/>
      <mx:Button x="32" y="144" label="Search" id="B1" click="go()" />
      <mx:RadioButtonGroup id="svrGrp"/>
      <mx:RadioButton x="32" y="66" selected="true" label="Denver" value="denver" groupName="svrGrp"/>
      <mx:RadioButton x="32" y="92" label="Chicago" value="chicago" groupName="svrGrp"/>
      <mx:RadioButton x="32" y="118" label="Portland" value="portland" groupName="svrGrp"/>
      <mx:DataGrid x="32" y="184" width="702" height="288" dataProvider="{clResults}">
            <mx:columns>
                  <mx:DataGridColumn headerText="Post Title" dataField="title"/>
                  <mx:DataGridColumn headerText="Link" dataField="link"/>
            </mx:columns>
      </mx:DataGrid>
      <mx:TextArea x="301" y="10" width="433" height="166" id="t" wordWrap="true" editable="true" enabled="true" />
</mx:Application>
0
 
jduawaAuthor Commented:
thanks.
0
 
jduawaAuthor Commented:
Why does that work and my code does not?  I am confused.  It looks to me like they are doing the same thing
0
 
Gary BenadeCommented:
They are doing the same thing, I just added error checking and bullet proofing, the xml from craiglists is invalid if there are no results for your query.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.