Как использовать пользовательский распознаватель URI для недопустимых URI в l xml? - PullRequest
0 голосов
/ 29 января 2020

Мне нужно использовать библиотеку 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.) И не применимы к моему сценарию использования.

Кто-нибудь знает способ достижения это?

...