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

如何在XSLT中用Apache Tika处理RTF超链接以解决XML解析错误

解决RTF超链接引发XML解析错误的XSLT处理方案

这是《如何使用XSLT 2/Saxon HE 11.3转换XML中的RTF文本节点?》的后续问题。在处理大数据集时,应用因源RTF中的HYPERLINK代码触发XML解析错误,提示元素类型“a”缺少匹配结束标签。需求明确:无需保留超链接功能,仅需将超链接转为纯文本格式(例如输出 CAESAR DIP: ..\..\SAUCES\Dips\Dip, Caesar.doc)。

当前使用的XSLT代码仅做了空值检查:

<xsl:choose>
    <xsl:when test="string-length(SPECORMETHOD) &gt; 0">
        <rtf-as-xhtml>
            <xsl:sequence select="tika:parse-rtf(SPECORMETHOD[string-length(.) &gt; 0])"/>
        </rtf-as-xhtml>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="'[EMPTY]'"/>
    </xsl:otherwise>
</xsl:choose>

解决方案

方案1:直接提取解析后的纯文本

Tika的parse-rtf会生成带<a>标签的XHTML,但部分RTF超链接解析后会产生不闭合的标签,导致XML解析失败。可以跳过XHTML结构,直接提取所有文本内容:

<xsl:choose>
    <xsl:when test="string-length(SPECORMETHOD) > 0">
        <rtf-plain-text>
            <xsl:value-of select="tika:parse-rtf(SPECORMETHOD[string-length(.) > 0])//text()"/>
        </rtf-plain-text>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="'[EMPTY]'"/>
    </xsl:otherwise>
</xsl:choose>

方案2:预处理RTF移除超链接代码

如果方案1仍有问题,可以在解析前用正则表达式移除RTF中的HYPERLINK标记。RTF超链接通常格式类似{\field{\*\fldinst HYPERLINK "..\..\SAUCES\Dips\Dip, Caesar.doc"}{\fldrslt CAESAR DIP}},替换规则可根据实际格式调整:

<xsl:choose>
    <xsl:when test="string-length(SPECORMETHOD) > 0">
        <!-- 替换RTF超链接为纯文本格式 -->
        <xsl:variable name="clean-rtf" select="replace(SPECORMETHOD, '\{field\{\*\fldinst HYPERLINK &quot;([^&quot;]+)&quot;\}\{fldrslt ([^\}]+)\}\}', '$2: $1')"/>
        <rtf-plain-text>
            <xsl:value-of select="tika:parse-rtf($clean-rtf)"/>
        </rtf-plain-text>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="'[EMPTY]'"/>
    </xsl:otherwise>
</xsl:choose>

项目环境

  • Eclipse 2022-12(4.26.0)
  • Maven
  • Apache Tika 2.7.0
  • Saxon HE 11.3
  • Java SE 1.8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:50:31