Мне нужно использовать библиотеку lxml
в Python для обработки преобразований XSLT с сотнями различных файлов XSLT, которые содержат недопустимые URI в тегах xsl:include
, например:
<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 (со схемой, без пробелов и т. Д. c.) И не применимы к моему сценарию использования.
Кто-нибудь знает способ достижения это?