Subject: Re: [xsl] How to unescape slash character using xml-to-json ? From: "Matthieu RICAUD-DUSSARGET m.ricaud-dussarget@xxxxxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 24 Oct 2019 08:12:22 -0000 |
Hi Tim, Hi Michael, Thanks for your answers, links and explanations. I applied Martinbs solution as suggested: xml-to-json(.) => parse-json() => serialize(map {'method': 'json', 'use-character-maps' : map {'/' : '/'}}) Parsing the json to serialize it back with character-maps looks quite bcomplexb for such a serialization option. I understand the debate on this subject. Maybe having an option to let the user choosing could have been a good compromiss ? Anyway this method works well b: Except it applies to the whole json : I canbt say this key value has to be solidus escaped and this one not (I could maybe work within the map for this) Therebs also an unexpected side effect : the output json is not in the same order. I also loose the indent option (which I had to move to the serialize method) For example, for this input : <fn:map xmlns:fn="http://www.w3.org/2005/xpath-functions"> <fn:string key="format">text/xml</fn:string> <fn:string key="contentType">text</fn:string> <fn:string key="rights">public</fn:string> <fn:string key="source">flash</fn:string> <fn:array key="altKeys"> <fn:string>flash:id:d28073e1005</fn:string> </fn:array> </fn:map>> When using: xslLib:xjson2json(*, map{'indent':true()}) I get this json output: { "format" : "text\/xml", "contentType" : "text", "rights" : "public", "source" : "flash", "altKeys" : [ "flash:id:d28073e1005" ] } And when using: xslLib:xjson2json(*) => parse-json() => serialize(map {'method': 'json', 'indent':true(), 'use-character-maps' : map {'/' : '/'}}) I get this json output: { "contentType":"text", "rights":"public", "format":"text/xml", "source":"flash", "altKeys": [ "flash:id:d28073e1005" ] } Which is not a probem as json properties order doesn't matter, just wondering why actually ? Cheers Matthieu Ricaud-Dussarget DeB : Michael Kay mike@xxxxxxxxxxxx [mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx] EnvoyC)B : jeudi 24 octobre 2019 07:15 CB : xsl-list <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> ObjetB : Re: [xsl] How to unescape slash character using xml-to-json ? Note: the reason that solidus is escaped by default is because the JSON can then be embedded in an HTML5 script tag. See explanation here: https://stackoverflow.com/questions/1580647/json-why-are-forward-slashes-esca ped There was considerable debate about this decision, as you can imagine: it's one that suits some use cases and not others. Michael Kay Saxonica On 24 Oct 2019, at 01:25, Tim Thompson mailto:timathom@xxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: Hi, Matthieu, SeeB Martin Honnen's answer here: https://stackoverflow.com/questions/44610431/json-serialization-with-xpath-3- 1-fnserialize Updated example:B https://xsltfiddle.liberty-development.net/bwdwrV/2 -- Tim A. Thompson Discovery Metadata Librarian Yale University Library On Wed, Oct 23, 2019 at 6:59 PM Matthieu RICAUD-DUSSARGET mailto:m.ricaud-dussarget@xxxxxxxxxxxxxxxxxx <mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: Hi all, B I need to generate this json output : B {"test":"foo/bar"} B I use XSLT3 function fn:xml-to-json to do this. My input is : B <fn:map xmlns:fn="http://www.w3.org/2005/xpath-functions"> B B B <fn:string key="test" escaped="false">foo/bar</fn:string> </fn:map> B But I always get this result with escaped slash : B {"test":"foo\/bar"} B Reading the spec at https://www.w3.org/TR/xslt-30/#func-xml-to-json at paragraph bStrings are escaped as follows:b it looks like I canbt unescape b/b (solidus?) character. B Is there really no way to do that using XSLT3 B json functionality ? Did I missed something obvious ? B Here is a running test : https://xsltfiddle.liberty-development.net/bwdwrV B Thanks in advance, B Cordialement, <image002.jpg>Matthieu RICAUD-DUSSARGET Expert XML SI EDITORIAL TC)l. +33 6 63 25 95 58 80, avenue de la Marne 92120 Montrouge B B http://www.mulberrytech.com/xsl/xsl-list http://lists.mulberrytech.com/unsub/xsl-list/885568 (by email) http://www.mulberrytech.com/xsl/xsl-list http://lists.mulberrytech.com/unsub/xsl-list/293509 (by email) http://www.mulberrytech.com/xsl/xsl-list http://lists.mulberrytech.com/unsub/xsl-list/663667 ()
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] How to unescape slash cha, Michael Kay mike@xxx | Thread | [xsl] W3C specifications on GitHub, Michael Kay mike@xxx |
Re: [xsl] How to unescape slash cha, Michael Kay mike@xxx | Date | Re: [xsl] Is this a grouping task?, Terry Badger terry_b |
Month |