[squeak-dev] The Inbox: Help-Squeak-Project-it.4.mcz

Hannes Hirzel hannes.hirzel at gmail.com
Tue May 4 15:10:39 UTC 2010


Sorry I meant

to create an instance of the XMLDocument class


On 5/4/10, Hannes Hirzel <hannes.hirzel at gmail.com> wrote:
> I have read through it and I like it. I will test it later.
>
> One minor thing
> instead of
>
>     * to instance an XML document class
> I would say
> either
>     * to create and instance of the XMLDocument class
> or
>     * to instantiate an XML document class object (however I'm not
> sure about this)
>
> --Hannes
>
>
>
> On Tue, 4 May 2010 14:31:38.375 0000, commits at source.squeak.org
> <commits at source.squeak.org> wrote:
>> A new version of Help-Squeak-Project was added to project The Inbox:
>> http://source.squeak.org/inbox/Help-Squeak-Project-it.4.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Help-Squeak-Project-it.4
>> Author: it
>> Time: 4 May 2010, 10:31:33.929 am
>> UUID: 1460ca93-adfa-0147-adbb-35447aa254ac
>> Ancestors: Help-Squeak-Project-tbn.3
>>
>> Adding "Retrieving XML data" tutorial. A rewritten version from
>> http://mecenia.blogspot.com/2010/05/using-squeak-with-blogger-export-files.html
>>
>> =============== Diff against Help-Squeak-Project-tbn.3 ===============
>>
>> Item was added:
>> + ----- Method: SqueakTutorials classSide>>bookName (in category
>> 'accessing') -----
>> + bookName
>> + 	^'Tutorials'!
>>
>> Item was added:
>> + ----- Method: SqueakTutorialsOnXML classSide>>pages (in category
>> 'accessing') -----
>> + pages
>> + 	^# (dataRetrieval)!
>>
>> Item was added:
>> + SqueakTutorials subclass: #SqueakTutorialsOnXML
>> + 	instanceVariableNames: ''
>> + 	classVariableNames: ''
>> + 	poolDictionaries: ''
>> + 	category: 'Help-Squeak-Project'!
>>
>> Item was added:
>> + ----- Method: SqueakTutorialsOnXML classSide>>dataRetrieval (in
>> category
>> 'pages') -----
>> + dataRetrieval
>> + 	^HelpTopic
>> + 		title: 'Retrieving XML data'
>> + 		contents:
>> + 'Retrieving data from XML documents is simple and easy. This tutorial
>> demonstrates the fundamentals with a straightforward approach where code
>> can
>> be tested right away either here or in a Workspace window. The beauty of
>> Squeak Smalltalk resides in the possibility to evaluate, inspect, print
>> and
>> debug code anywhere and this window is no different.
>> +
>> + This tutorial demonstrates how...
>> +
>> + 	* to retrieve an XML document from the World Wide Web
>> + 	* to instance an XML document class
>> + 	* to inspect and understand the content of an XML document
>> + 	* to retrieve and display values from specific XML tags
>> +
>> + Retrieve an XML document from the World Wide Web
>> +
>> + There are many manners to retrieve data from the World Wide Web in
>> Squeak
>> Smalltalk. HTTPClient is among them and let you download files in all
>> simplicity. Select the following code snippet and inspect it (press
>> alt-i).
>> An Inspect window will open with the document loaded in memory. The
>> result
>> is a MIMEDocument object.
>> +
>> + 	HTTPClient httpGetDocument:
>> ''http://www.squeaksource.com/ss/feed.rss''.
>> +
>> + TIP: Select HTTPClient and browse it (press alt-b) to open a System
>> Browser window on its class. HTTPClient does not have instance methods
>> but
>> it has class methods. Click on class to see class methods.
>> +
>> + Instantiate an XML Document
>> +
>> + An instance of MIMEDocument will not allow to retrieve XML data in a
>> comprehensive manner because it does not understand the nature of XML.
>> For
>> this reason, it is necessary to parse the content of MIMEDocument using
>> XMLDOMParser. XMLDOMParser>>parseDocumentFrom: requires a stream as a
>> parameter and ReadStream will be used for this purpose. The following
>> code
>> snippet instantiates an XMLDocument using the content of the downloaded
>> file.
>> +
>> + 	| doc |
>> + 	doc := HTTPClient httpGetDocument:
>> ''http://www.squeaksource.com/ss/feed.rss''.
>> + 	XMLDOMParser parseDocumentFrom: (ReadStream on: (doc content)).
>> +
>> + Inspect and understand the content of an XML document
>> +
>> + XML is a flexible document format and it is necessary to understand how
>> each given XML file is structured in order to properly search, retrieve
>> and
>> manipulate data. Inspecting values is critical in a dynamic programming
>> language and environment, such as Squeak Smalltalk. Select the previous
>> code
>> snippet and inspect it (press alt-i).
>> +
>> + Unfortunately, the Inspect window does not reveal a lot about the XML
>> structure of the downloaded file. Select the previous code snippet once
>> again and explore it (press alt and the capital letter i). An Explorer
>> window will open with a tree outline on the instance of XMLDocument.
>> +
>> + The Inspect and Explorer windows tell a lot about an XMLDocument. The
>> sections are instance variables and their values are displayed aside. In
>> the
>> Explorer window, unfold elementsAndContents. Unfold other sections as
>> deem
>> necessary to understand the XML format and the data available.
>> +
>> + The gibberish coding is about to become clear. Open a Browser window
>> from
>> the world menu and right click in the first pane, select find class
>> (press
>> alt-f) and type XMLDocument to search for its class, or select the class
>> name and browse it (press alt-b). However, it is suggested to read more
>> about XMLParser and XMLParserTest first.
>> +
>> + Retrieve and display values from specific XML tags
>> +
>> + The downloaded XML file contains a list of items which are denoted by
>> the
>> tag name "item". The Explorer window revealed the content of interest is
>> located at the array index 1 of the elementsAndContents.
>> +
>> + The following code snippet will display items in a Transcript window.
>> Open
>> a Transcript window using the world menu before selecting and executing
>> the
>> code. Select the code snippet and execute it (press alt-d).
>> +
>> + 	| doc xml |
>> + 	doc := HTTPClient httpGetDocument:
>> ''http://www.squeaksource.com/ss/feed.rss''.
>> + 	xml := XMLDOMParser parseDocumentFrom: (ReadStream on: (doc content)).
>> + 	(xml elements at: 1) tagsNamed: #item do: [:e |
>> + 		Transcript show: (e asString); cr.
>> + 		].
>> +
>> + An XML item looks like this:
>> +
>> + 	<item>
>> + 	<title>SqueakSource-lr.1039.mcz</title>
>> + 	<link>http://www.squeaksource.com/ss.html</link>
>> + 	<description>integrated new stylesheet</description>
>> + 	<pubDate>Sat, 10 Apr 2010 11:30:38 +0100</pubDate>
>> + 	<author>Lukas Renggli &lt;renggli at iam.unibe.ch&gt;</author>
>> + 	<category>SqueakSource, seaside, server</category>
>> + 	<enclosure length="302570" type="application/x-monticello"
>> url="http://www.squeaksource.com/ss/SqueakSource-lr.1039.mcz"/>
>> + 	<guid isPermaLink="false"/> </item>
>> +
>> + The following code snippet uses information learned, retrieves each
>> comment and displays them in a Transcript window. Notice an author can
>> have
>> a nil value and is handled accordingly.
>> +
>> + 	| doc xml |
>> + 	doc := HTTPClient httpGetDocument:
>> ''http://www.squeaksource.com/ss/feed.rss''.
>> + 	xml := XMLDOMParser parseDocumentFrom: (ReadStream on: (doc content)).
>> + 	(xml elements at: 1) tagsNamed: #item do: [:e |
>> + 		Transcript
>> + 			show: ''Date: '', ((e firstTagNamed: #pubDate) contentString); cr;
>> + 			show: ''Title: '', ((e firstTagNamed: #title) contentString); cr;
>> + 			show: ''Author: '',
>> + 				(((e firstTagNamed: #author) notNil)
>> + 					ifTrue: [(e firstTagNamed: #author) contentString]
>> + 					ifFalse: ['''']); cr;
>> + 			show: ''Description: '', ((e firstTagNamed: #description)
>> contentString); cr; cr.
>> + 			].
>> +
>> + An item will now looks like:
>> +
>> + 	Date: Wed, 21 Apr 2010 22:33:18 +0100
>> + 	Title: SqueakSource-lr.1060.mcz
>> + 	Author: Lukas Renggli <renggli at iam.unibe.ch>
>> + 	Description: - ignore email errors
>> + '!
>>
>> Item was added:
>> + ----- Method: SqueakTutorialsOnXML classSide>>bookName (in category
>> 'accessing') -----
>> + bookName
>> + 	^'XML'!
>>
>> Item was added:
>> + SqueakHelp subclass: #SqueakTutorials
>> + 	instanceVariableNames: ''
>> + 	classVariableNames: ''
>> + 	poolDictionaries: ''
>> + 	category: 'Help-Squeak-Project'!
>>
>>
>>
>



More information about the Squeak-dev mailing list