Связанное предложение с картой персонажа можно использовать, только если вы готовы ввести шаг parse-json() => serialize(...)
:
. => xml-to-json() => parse-json() => serialize(map { 'method' : 'json', 'use-character-maps' : map { '/' : '/' } })
Таким образом, с
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select=". => xml-to-json() => parse-json() => serialize(map { 'method' : 'json', 'use-character-maps' : map { '/' : '/' } })"/>
</xsl:template>
</xsl:stylesheet>
в https://xsltfiddle.liberty -development.net / b4GWVd / 25 Я получаю
{"o_array":[{"s/1":"x/y/z"},{"s2":"<a href=\"/x/y\">Link</a> a/b \"test\""}]}
Вставить параметр сериализации, специфичный для Saxon, в строковые значения, которые являются фрагментами XML. Я думаю, вы можете попытаться выполнить вводсначала через режим, который просто выполняет еще один шаг разбора и сериализации, только на этот раз как
. => parse-xml-fragment() => serialize(map {
'method': 'xml',
QName('http://saxon.sf.net/', 'single-quotes'): true()
})
С Saxon 9,9 EE в oXygen и
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of
select="
$single-quotes => xml-to-json() => parse-json() => serialize(map {
'method': 'json',
'use-character-maps': map {'/': '/'}
})"
/>
</xsl:template>
<xsl:variable name="single-quotes">
<xsl:apply-templates mode="serialize-fragments"/>
</xsl:variable>
<xsl:mode name="serialize-fragments" on-no-match="shallow-copy"/>
<xsl:template match="string" mode="serialize-fragments"
xpath-default-namespace="http://www.w3.org/2005/xpath-functions">
<xsl:copy>
<xsl:apply-templates select="@*" mode="#current"/>
<xsl:try
select="
. => parse-xml-fragment() => serialize(map {
'method': 'xml',
QName('http://saxon.sf.net/', 'single-quotes'): true()
})">
<xsl:catch select="string()"/>
</xsl:try>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Я получаю
{"o_array":[{"s/1":"x/y/z"},{"s2":"<a href='/x/y'>Link</a> a/b \"test\""}]}