You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Saxon XSLT连接SQLite时HTML内容丢失问题求助

解决方案

1. 修正XSLT生成SQL语句的逻辑,保留HTML标签并正确转义

你提到变量$text包含完整HTML,但插入后丢失标签,大概率是生成INSERT语句时误将HTML节点转成了纯文本,或者未正确处理SQL字符串转义。

用Saxon支持的serialize()函数将HTML节点序列化为字符串,再对SQL特殊字符(单引号)做转义:

<!-- 将HTML节点序列化为字符串 -->
<xsl:variable name="html-content" select="serialize($text, method='html')"/>
<!-- 转义SQL中的单引号(SQLite用两个单引号表示转义) -->
<xsl:variable name="escaped-html" select="replace($html-content, '''', '''''')"/>

<!-- 生成INSERT语句 -->
<xsl:text>INSERT INTO your_table (txt_string) VALUES ('</xsl:text>
<xsl:value-of select="$escaped-html"/>
<xsl:text>');</xsl:text>
  • serialize($text, method='html')会保留所有HTML标签和结构;
  • replace()处理单引号转义,避免SQL语法错误。

2. 使用Saxon SQL扩展直接操作数据库(更安全)

手动生成SQL容易出错,推荐用Saxon的sql扩展模块直接绑定参数插入,自动处理转义:

  1. 引入命名空间:
<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:sql="http://saxon.sf.net/sql">
  1. 建立SQLite连接:
<sql:connect driver="org.sqlite.JDBC" database="jdbc:sqlite:your_database.db">
  <sql:user name="" password=""/>
</sql:connect>
  1. 序列化HTML并插入:
<xsl:variable name="html-string" select="serialize($text, method='html')"/>
<sql:insert table="your_table">
  <sql:column name="txt_string" select="$html-string"/>
</sql:insert>

注意:需要将SQLite JDBC驱动(如sqlite-jdbc-x.x.x.jar)加入Saxon的类路径。

3. 切换到XML数据库(如eXist-db)的场景

如果你的业务经常需要基于HTML结构查询数据(比如定位某个标签下的内容),切换到eXist-db这类XML数据库会更高效:

  • 直接将解析后的HTML节点(或转换为XHTML)存入数据库,无需转成字符串;
  • 用XPath直接查询HTML结构,避免字符串解析的麻烦;
  • 天然支持XML/HTML的层级存储,无需处理转义问题。

内容的提问来源于stack exchange,提问作者Paulb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:22:25