在Saxon-JS 2中使用XSLT 3.0,如何配置处理器以支持codepoints-to-string(8)?

前端开发 2026-07-11

在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-jsonjson-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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章