Hi Monty

Many thanks. I have picked up a project that I had not worked on for a while, 
which explains why I am using an old image. I shall try the latest Moose image, 
as you suggest. My only anxiety is that I need to be able to use a rather 
ancient package called TextLint, and I do not know whether it will load OK in a 
new Pharo. If not, I shall try to update my existing image.

With the latest XPath, will it be clear how to use the binary syntax to carry 
out node tests like the example of '//div[@id=''catlinks'']//' that I cited 
below? The case I am interested in is where the actual identifier ('catlinks' 
in this case) is a variable rather than a constant. It would be possible to do 
it in standard XPath by assembling the XPath string with a variable component, 
but it might be more convenient in the binary syntax.

Many thanks for your help.

Peter Kenny

-----Original Message-----
From: Pharo-users [mailto:pharo-users-boun...@lists.pharo.org] On Behalf Of 
monty
Sent: 03 September 2016 06:54
To: pharo-users@lists.pharo.org
Subject: Re: [Pharo-users] Coding XPath as Smalltalk

Peter, you're using an ancient version with bugs that were fixed last fall. The 
newest version has more tests and correct behavior (checked against a reference 
implementation). Just download a new Moose image and you'll get it, along with 
an up to date XMLParser. (But if you insist on upgrading in your old image, run 
"XPath initialize" after)

The binary syntax (there are keyword equivalents now) officially only supports 
XPath axis selectors like #/ and #// that take node test arguments where the 
node tests can be name tests like 'name,' '*', 'prefix:*' or type tests like 
'text()', 'comment()', 'element(name)'. 

Filters aren't officially supported with that syntax, but you can always use 
select: on the result. ?? was removed, but I might add it back as shorthand. 
Filters are implemented differently now.

> From: PBKResearch <pe...@pbkresearch.co.uk>
> To: pharo-users@lists.pharo.org
> Subject: [Pharo-users] Coding XPath as Smalltalk
> 
> Hello
>  
> I am using XPath as a way of dissecting web pages, especially from 
> Wiktionary. Generally I get good results, but I could get useful extra 
> flexibility by using the binary Smalltalk operators to represent XPath, as 
> mentioned at the end of the class comment for XPath. However, the description 
> there is very terse, and I am having difficulty seeing how to include more 
> complex expressions, especially attribute tests. I have put some of my XPath 
> expressions through the XPath compiler and looked at the output, and out of 
> that I have found expressions which work but look very clumsy. As an example, 
> I have used the fragment:
>  
> document xPath: '//div[@id=''catlinks'']//li//text()'
>  
> and found that an equivalent is:
>  
> document //'div' ?? [:node :x :y|(node attributeAt: 'id') = 
> 'catlinks']//'li'//[:n| n isStringNode]].
> (I had to put two dummy arguments in the three-argument block to get it to 
> work.)
>  
> Is there a more extensive explanation of the use of these binary operators? 
> If not, could some kind person show me the most concise translation of the 
> sample XPath above, to give me a start in working out more complex cases?
>  
> Many thanks for any help.
>  
> Peter Kenny


Reply via email to