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

使用lxml.etree执行含XPath 2.0函数的XSL转换报错,求替代方案

问题解答

首先明确:elementpath没有类似lxml.etree.XSLT的XSLT转换功能,它只是一个专注于实现XPath 2.0/3.0语法的查询库,不涉及XSLT处理器的实现。

针对你遇到的XPath 2.0函数不支持的问题,有两个可行的解决方向:

1. 换用支持XSLT 2.0/3.0的处理器

lxml仅支持XSLT 1.0,要使用year-from-dateTime这类XPath 2.0函数,推荐用SaxonC的Python绑定(SaxonC-HE),它支持完整的XSLT 2.0/3.0特性。

示例代码如下:

from saxonc import *

with PySaxonProcessor(license=False) as proc:
    xslt_processor = proc.new_xslt30_processor()
    # 加载XSLT文件
    xslt_executable = xslt_processor.compile_stylesheet(stylesheet_file=xsl_filename)
    # 执行转换
    result = xslt_executable.transform_to_string(source_file=xml_filename)
    print(result)

2. 在XSLT 1.0中手动实现日期年份提取

如果不想更换库,可以用XPath 1.0的字符串处理函数模拟year-from-dateTime的功能。比如针对ISO 8601格式的dateTime(如2024-05-20T12:34:56),用substring提取前4位作为年份:

<xsl:for-each select="substring($beginDate, 1, 4) to substring($endDate, 1, 4)">
    <!-- 你的业务逻辑 -->
</xsl:for-each>

如果dateTime格式有其他变化,可根据实际格式调整字符串截取的位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:02:10