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

使用XSLT从XML生成SQL INSERT语句时无法提取title值的问题

解决XSLT无法提取TEI XML中title值的问题

我来帮你排查这个问题,你遇到的VALUES部分为空的情况,主要是两个核心原因:XML命名空间未处理和模板匹配逻辑错误,下面给你详细分析和修正方案:

问题根源分析

  1. 命名空间遗漏:你的TEI XML文档里声明了命名空间xmlns="http://www.tei-c.org/ns/1.0",这意味着所有元素都属于这个命名空间,但你的XSLT里没有声明和使用这个命名空间,导致XPath表达式根本找不到对应的元素。
  2. 模板匹配错误:你的XSLT里写了match="root",但你的XML根节点是<TEI>,根本不存在root节点,同时apply-templates select="root"也完全匹配不到任何内容,所以输出自然是空的。

修正后的XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:tei="http://www.tei-c.org/ns/1.0"> <!-- 声明TEI命名空间并绑定前缀tei -->
<xsl:output method="text" encoding="UTF-8" omit-xml-declaration="yes" indent="no"/>

<xsl:template match="/">
    <xsl:text>INSERT INTO tblObjects</xsl:text>
    <xsl:text>(ObjectID, Title, TMid, Material, ObjectType, Height) VALUES (</xsl:text>
    <!-- 提取title值,注意使用tei前缀 -->
    <xsl:text>'</xsl:text>
    <xsl:value-of select="tei:TEI/tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:title"/>
    <xsl:text>'</xsl:text>
    <!-- 这里你可以继续添加其他字段的提取,比如TMid、Material等,同样用tei前缀 -->
    <xsl:text>);</xsl:text>
</xsl:template>
</xsl:stylesheet>

补充说明

如果需要提取其他字段(比如TMid、Material、尺寸等),只需要按照同样的方式,用tei:前缀定位元素即可,比如提取TMid可以用:

<xsl:value-of select="tei:TEI/tei:teiHeader/tei:fileDesc/tei:publicationStmt/tei:idno[@type='TM']"/>

记得给字符串类型的字段加上单引号,符合SQL语法要求。

测试输出

用你提供的示例XML测试,会得到如下正确的INSERT语句:

INSERT INTO tblObjects(ObjectID, Title, TMid, Material, ObjectType, Height) VALUES ('Funerary inscription for Marcellus, a smith');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:08:40