|
Subject: Re: [xsl] XML to Json and escaped characters From: "Michael Kay michaelkay90@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 18 Mar 2025 18:00:16 -0000 |
The regular expression `\t` matches tab characters. To match the escape
sequence `\t`, you want the regular expression `\\t`.
Michael Kay
Saxonica
> On 18 Mar 2025, at 17:56, dvint@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> I've recently started working with json-to-xxml() to create a conversion to
asciidoc format for documentation. I've now found a need to take some of that
generated XML back to JSON as it is an actual example for an API call.
>
> Here is an XML snippet:
>
> <map key="actionCodes">
> <number key="code">99</number>
> <string key="actionMessage">Please click
> to Continue.</string>
> <string key="cat">Environment</string>
> </map>
>
> That produces this:
>
> { "code" : 99,
> "actionMessage" : "Please click\n\t\t\t\t\t\t\t\t\t\tto Continue.",
> "cat" : "Environment" },
>
> In the actionMessage I have all the \t and \n values that I need to
normalize. I've got other places where URLs have
>
> "url" :
"https:\/\/cfweb.amalgam.ascendant.cloud\/MWA\/index.html?token=c9c11bd1-5cdd
-48d9-993a-fa061e050380" }
> or text with the / escaped
> "ScoreSegmentResult" : "N\/A",
>
> I tried something like this to remove the \t
>
> <xsl:variable name="rawJSON" select="j:xml-to-json(., map { 'indent' :
true() })"/>
> <xsl:value-of select="replace($rawJSON, '\t', '')"/>
>
> But it doesn't make any difference to the output.
>
> Any thoughts on how to handle this?
>
> I checked the spec for xml-to-json() that references using custom template
rules for xml-tojson() and references B.2 Stylesheet for converting XML to
JSON. In that stylesheet I see the section I would want to change, but I have
no clue on how I would go about using this suggestion.
>
> This is what I need to change
>
> <!-- Function to escape special characters -->
> <xsl:function name="j:escape" as="xs:string" visibility="final">
> <xsl:param name="in" as="xs:string"/>
> <xsl:value-of>
> <xsl:for-each select="string-to-codepoints($in)">
> <xsl:choose>
> <xsl:when test=". gt 65535">
> <xsl:value-of select="concat('\u', j:hex4((. - 65536)
idiv 1024 + 55296))"/>
> <xsl:value-of select="concat('\u', j:hex4((. - 65536)
mod 1024 + 56320))"/>
> </xsl:when>
> <xsl:when test=". = 34">\"</xsl:when>
> <xsl:when test=". = 92">\\</xsl:when>
> <xsl:when test=". = 08">\b</xsl:when>
> <xsl:when test=". = 09">\t</xsl:when>
> <xsl:when test=". = 10">\n</xsl:when>
> <xsl:when test=". = 12">\f</xsl:when>
> <xsl:when test=". = 13">\r</xsl:when>
> <xsl:when test=". lt 32 or (. ge 127 and . le 160)">
> <xsl:value-of select="concat('\u', j:hex4(.))"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="codepoints-to-string(.)"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:for-each>
> </xsl:value-of>
> </xsl:function>
>
> ..dan
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] XML to Json and escaped chara, dvint@xxxxxxxxx | Thread | Re: [xsl] XML to Json and escaped c, dvint dvint@xxxxxxxx |
| [xsl] XML to Json and escaped chara, dvint@xxxxxxxxx | Date | Re: [xsl] XML to Json and escaped c, Martin Honnen martin |
| Month |