如何对lxml中的无效URI使用自定义URI解析器?

时间:2020-01-29 09:23:23

标签: lxml

我需要使用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(使用方案,无空格等),并且不适用于我的用例。

有人知道实现这一目标的方法吗?

0 个答案:

没有答案