Thank you Gerrit, that works well and gives me a new regex tool.
Regards,
Peter
________________________________________
From: Imsieke, Gerrit, le-tex
[gerrit.imsieke@xxxxxxxxx]
Sent: March 26, 2014 4:54 PM
To:
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: analyze-string regex
Hi
Peter,
You probably need to make all of the .* in the regex non-greedy (and
restore flags="s").
Gerrit
On 26.03.2014 21:30, Rushforth, Peter wrote:
>
Hi,
>
> I am trying to use xsl:analyze-string to process a json response, the
model of which is fixed.
>
> The target environment is saxon-ce, but I am
using oxygen to get things working.
>
> I was under the impression that the
regex would perform multiple matches, 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?
>
> When I use dot-all
mode (@flags="s"), I get a single <option> corresponding to the last object in
the array. When no flags, an empty sequence. Any suggestions appreciated.
>
> My objective is to generate a sequence of <option> elements matching the
json objects:
>
> xslt:
>
> <xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ex="http://example.org/namespace" exclude-result-prefixes="ex">
>
<xsl:output method="xml" omit-xml-declaration="yes"/>
> <xsl:template
match="json">
> <datalist>
> <xsl:copy-of
select="ex:json2Options(.)"/>
> </datalist>
> </xsl:template>
>
<xsl:function name="ex:json2Options">
> <xsl:param name="json"/><!--
1 2 3 4 5
6 7 8 9 -->
>
<xsl:variable name="regexps"
select="'(\{.*("title":.*"(.*?)").*("qualifier"
:.*"(.*?)").*("type":.*"(.*?)").*("geometr
y":.*(\{.*?\})).*\}{1,})'"/>
> <xsl:analyze-string select="$json"
regex="{$regexps}">
> <xsl:matching-substring>
> <xsl:element
name="option">
> <xsl:attribute name="data-title"
select="regex-group(3)"></xsl:attribute>
> <xsl:attribute
name="data-qualifier" select="regex-group(5)"/>
> <xsl:attribute
name="data-type" select="regex-group(7)"/>
> <xsl:attribute
name="data-geometry" select="regex-group(9)"/>
> <xsl:value-of
select="regex-group(3)"/>
> </xsl:element>
>
</xsl:matching-substring>
> </xsl:analyze-string>
> </xsl:function>
>
</xsl:stylesheet>
>
> Input document:
>
> <json>
> [
> {
> "title":
"Ottawa, Carleton, Ontario (Unincorporated area)",
> "qualifier":
"LOCATION",
> "type": "Geoname",
> "bbox": [-75.6903367156744,
45.373570070138, -75.6524412843256, 45.427540929862],
> "geometry":
{"type":"Point","coordinates":[-75.671387,45.400555]}
> },
> {
> "title":
"Ottawa, Carleton; Russell, Ontario (City)",
> "qualifier": "LOCATION",
>
"type": "Geoname",
> "bbox": [-76.3555857, 44.9617738, -75.2465783,
45.5376514],
> "geometry":
{"type":"Point","coordinates":[-75.58429,45.333389]}
> },
> {
> "title":
"031G OTTAWA",
> "qualifier": "LOCATION",
> "type": "NTS",
>
"bbox": [-76.0, 45.0, -74.0, 46.0],
> "geometry":
{"type":"Point","coordinates":[-75,45.5]}
> }]</json>
>
>
> Cheers, and
thanks,
> Peter Rushforth
>
>
>
>
>
--~------------------------------------------------------------------
>
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@xxxxxxxxxxxxxxxxxxxxxx>
> --~--
>
--
Gerrit
Imsieke
Geschdftsf|hrer / Managing Director
le-tex publishing services GmbH
Weissenfelser Str. 84, 04229 Leipzig, Germany
Phone +49 341 355356 110, Fax
+49 341 355356 510
gerrit.imsieke@xxxxxxxxx, http://www.le-tex.de
Registergericht / Commercial Register: Amtsgericht Leipzig
Registernummer /
Registration Number: HRB 24930
Geschdftsf|hrer: Gerrit Imsieke, Svea Jelonek,
Thomas Schmidt, Dr. Reinhard Vvckler
|