使用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
相关产品推荐
相关产品推荐

