在Saxon-JS 2中使用XSLT 3.0,如何配置处理器以支持codepoints-to-string(8)?
在Saxon-J中,我可以通过以下方式设置处理器配置以允许XML 1.1字符,例如:
processor.getUnderlyingConfiguration().setXMLVersion(XML11);
我在寻找在Saxon-JS 2(或perhaps the Saxon-JS 3 beta)中的等价实现。
例如,在Saxon-JS 2中,对这个xpath表达式会报错:
codepoints-to-string(8)
引发的错误:
Uncaught XError: Invalid XML character 0x8
在Saxon-JS中可以实现吗?
解决方案
我认为在浏览器中与SaxonJS一起使用XML 1.1不太可能,因为XML解析依赖浏览器底层的XML解析器,而我还没有遇到支持XML 1.1的浏览器。
不过,在这段时间内,可以在浏览器中运行Saxon HE Java,借助一个名为CheerpJ的工具,它基本上把Java类文件编译成WebAssembly/JavaScript,从而在浏览器中运行Java代码。也许这不是你现在想要的方案,但我提一下,因为它允许使用XML 1.1,此链接中的示例)。
另一方面,你的评论表明你并不是要解析XML 1.1,而是处理包含控制字符的JSON输入/输出;此外你说你看到一些Unicode替换字符,我认为这是 parse-json 或 json-doc 函数的默认行为,但你可以通过提供一个 fallback 函数来改变它。对于SaxonJS,我测试了 这个示例;它会做,例如
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all">
<xsl:output method="json"/>
<xsl:template match=".">
<xsl:sequence select="parse-json(., map { 'fallback' : function($s as xs:string) { $s } })"/>
</xsl:template>
</xsl:stylesheet>
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。