BaseX调用XSLT模块通过API报[XPST0003]错误求助
问题解决:BaseX远程API调用XSLT查询失败
问题原因
本地BaseX GUI可正常执行的XQuery,通过Postman调用远程API时报错[XPST0003] Expecting variable declaration,核心原因是XML提交格式未处理转义:
- GUI会自动处理查询文本中的XML特殊字符,但直接提交XML格式的请求时,
<text>标签内的<xsl:stylesheet>等XML标签会被XML解析器误识别为XML结构,而非XQuery的字符串字面量,导致XQuery语法被破坏。
修复方案
方案1:转义XML特殊字符
将查询文本中的<替换为<,>替换为>,确保XML解析器将其视为文本内容:
<query><text> let $xml := doc("/dsn_ext/pcbtestxmldbdata001_test001.xml") let $style := <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" /><xsl:template match="/"><xsl:copy-of select="." /></xsl:template></xsl:stylesheet> return xslt:transform-text($xml,$style) </text> </query>
方案2:使用CDATA包裹查询文本
用<![CDATA[...]]>包裹整个XQuery代码,告知XML解析器直接保留内部内容,不做XML解析:
<query><text><![CDATA[ let $xml := doc("/dsn_ext/pcbtestxmldbdata001_test001.xml") let $style := <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml" /><xsl:template match="/"><xsl:copy-of select="." /></xsl:template></xsl:stylesheet> return xslt:transform-text($xml,$style) ]]></text> </query>
验证
两种方案均可确保远程BaseX API正确解析XQuery语法,执行结果与本地GUI一致。
内容的提问来源于stack exchange,提问作者Walley Chan
相关产品推荐
相关产品推荐

