我需要使用Python中的lxml
库来处理XSLT转换,其中包含数百个不同的XSLT文件,这些文件在xsl:include
标签中包含无效的URI,例如:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:include href="XYZ Templates.xslt" />
[...]
</xsl:stylesheet>
由于某种原因,这些文件当前由支持这些无效URI的工具使用。 当我尝试用类似的东西加载其中一个文件时
import lxml.etree as ET
xslt = ET.parse('The File.xslt')
transform = ET.XSLT(xslt)
我会得到一个例外:
Traceback (most recent call last):
File "src/lxml/xslt.pxi", line 410, in lxml.etree.XSLT.__init__
lxml.etree.XSLTParseError: xsl:include : invalid URI reference XYZ Templates.xslt
由于向后兼容性问题,我不能简单地修复文件并使这些引用成为有效的URI。更糟糕的是,包含的文件还包含包含,而包含又包含包含,依此类推。
我试图实现一个自定义URI解析器来处理这些问题,但是看起来好像在调用解析器之前就抛出了异常。我猜期望是自定义URI解析器可以接受有效的URI(使用方案,无空格等),并且不适用于我的用例。
有人知道实现这一目标的方法吗?