- From: Norman Walsh <ndw@nwalsh.com>
- Date: Mon, 03 Nov 2008 20:55:28 -0500
- To: public-xml-processing-model-comments@w3.org
- Message-ID: <m23ai8tfu7.fsf@nwalsh.com>
Consider this pipeline fragment: <p:for-each> <p:variable name="opos" select="p:iteration-position()"/> <p:for-each> <p:iteration-source select="//div"/> <p:string-replace match="/div/@a" replace="3+4"/> </p:for-each> </p:for-each> For each matched /div/@a, the replacement expression "3+4" is evaluated, producing 7 and the string value of @a becomes "7". Makes sense. Now consider: <p:for-each> <p:variable name="opos" select="p:iteration-position()"/> <p:for-each> <p:iteration-source select="//div"/> <p:string-replace match="/div/@a"> <p:with-option name="replace" select="concat($opos,',',p:iteration-position())"/> </p:string-replace> </p:for-each> </p:for-each> This is the moral equivalent of (for the first iteration of each loop, at least), replace="1,1" If you evaluate "1,1" you get...a sequence of two 1's. That's either an error or the result is @a="11" (or maybe "1 1"). Which of those is the right answer? The poor, naive user probably expected @a="1,1". AFAICT, in order to get that, he or she has to write: <p:with-option name="replace" select="concat('"',$opos,',',p:iteration-position(),'"')"/> which works, but seems surprising. Did my analysis go off the rails somewhere? Be seeing you, norm -- Norman Walsh <ndw@nwalsh.com> | Some people do their laundry in emacs, http://nwalsh.com/ | but I find typing ^C-^X-^W-q-L-TT to | add the fabric softener to be a bit | cumbersome.-- rlr@panix.com
Received on Tuesday, 4 November 2008 01:56:45 UTC