Hi Graydon,
allowing me to generate a sequence of elements from a string
containing multiple objects that I match.  If that is true (the spec
says it should be, I think), then my regex is faulty.  Could you offer
any suggestions about the following, please?
Don't get yourself stuck writing a regex like that?
Thanks, I appreciate the soundness of that advice (now).
There might be a JSON-to-XML library out there, which'd be my first choice.
Yes, that was my first instinct too.  I found a generic json2xml.xsl library, 
but it 
performed too slowly.  I figured I needed something more specific in order to
speed things up.
If not, I couldn't figure out precisely what you were trying to do -- I
would have had to be able to figure out which regex sub-match was which
-- but the following is the sort of thing I think works a lot better as
an approach.  Saw up the input with tokenize when you can (the "we don't
need quotes when we've got braces" bit of JSON isn't a help!) and get
some use out of the regular structure, restricting string matches to
replace and relatively short and simple stuff you (or at least I!) can
comprehend.
I would normally work with tokenize as well,  but I thought this might be a good
opportunity to use some declarative code which (might) perform better.
What I came up seems to work ok:
  <xsl:function name="ex:locationJson2Options">
    <xsl:param name="json"/><!--           1    2                            3  
           4                              5                6                    
     7              8 9 10 11                  12         13                    
   14                     15 16                      17                         
            -->
    <xsl:variable name="regexps" 
select="'(\{.*?("title":.*?"(.*?)").*?("qualifier":.*?"(.*?)").*?("type":.*?"(.*?)").*?(((("bbox":.*?\[(.*?)\]).*?("geometry":.*?(\{.*?\})).*?\}{1,}))|(("geometry":.*?(\{.*?\})).*?\}{1,})))'"/>
    <xsl:analyze-string select="$json" regex="{$regexps}" flags="s">
      <xsl:matching-substring>
        <xsl:if test="regex-group(11)"><!-- if a bbox exists we've got an 
option -->
          <xsl:element name="option">
         <xsl:if test="regex-group(9)">
              <xsl:attribute name="data-bbox" 
select="translate(regex-group(12),' ','')"/>
         </xsl:if>
            <xsl:value-of select="regex-group(3)"/>
          </xsl:element>
        </xsl:if>
      </xsl:matching-substring>
    </xsl:analyze-string>
  </xsl:function>
 
I am glad it didn't lead to madness, as in this case ;-) 
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
Cheers,
Peter
--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--