Subject: Re: [xsl] analyze-string regex From: "Imsieke, Gerrit, le-tex" <gerrit.imsieke@xxxxxxxxx> Date: Wed, 26 Mar 2014 21:54:40 +0100 |
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":.*"(.*?)").*("geometry":.*(\{.*?\})).*\}{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
-- Gerrit Imsieke GeschC$ftsfC<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
GeschC$ftsfC<hrer: Gerrit Imsieke, Svea Jelonek, Thomas Schmidt, Dr. Reinhard VC6ckler
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] analyze-string regex, Rushforth, Peter | Thread | RE: [xsl] analyze-string regex, Rushforth, Peter |
[xsl] analyze-string regex, Rushforth, Peter | Date | RE: [xsl] analyze-string regex, Rushforth, Peter |
Month |