Я пытаюсь преобразовать XML в XHTML с помощью XSLT. Я бы хотел сделать это с помощью Python, но я не привязан к какой-либо библиотеке. После the directions here, я пытался это:XSLT с lxml для Python: запрещенная переменная?
from lxml import etree
xslt_root=etree.parse('editions.xsl')
transform=etree.XSLT(xslt_root)
Но я получаю эту ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "xslt.pxi", line 406, in lxml.etree.XSLT.__init__ (src/lxml/lxml.etree.c:136874)
lxml.etree.XSLTParseError: Forbidden variable
Я также попытался с помощью this python script, который использует LibXSLT, но это дает мне эти ошибки:
Forbidden variable
compilation error: file editions.xsl line 283 element key
xsl:key : 'match' pattern compilation failed '//tei:div/tei:ab/tei:ptr[@type='emendation'][@ana='#folger'] |// tei:rdg[contains(@wit,$rdg)]/tei:ptr[@type='emendation'][@ana='#folger']'
Forbidden variable
compilation error: file editions.xsl line 284 element key
xsl:key : 'match' pattern compilation failed '//tei:div/tei:ab/tei:ptr[@type='emendation'][@ana='#folger'] |// tei:rdg[contains(@wit,$rdg)]/tei:ptr[@type='emendation'][@ana='#folger']'
Forbidden variable
compilation error: file editions.xsl line 285 element key
xsl:key : 'match' pattern compilation failed '//tei:div/tei:ab/tei:ptr[@type='emendation'][@ana='#texta'] |// tei:rdg[contains(@wit,$rdg)]/tei:ptr[@type='emendation'][@ana='#texta']'
Forbidden variable
compilation error: file editions.xsl line 286 element key
xsl:key : 'match' pattern compilation failed '//tei:div/tei:ab/tei:ptr[@type='emendation'][@ana='#texta'] |// tei:rdg[contains(@wit,$rdg)]/tei:ptr[@type='emendation'][@ana='#texta']'
Forbidden variable
compilation error: file editions.xsl line 287 element key
xsl:key : 'match' pattern compilation failed '//tei:div/tei:ab/tei:ptr[@type='emendation'][@ana='#textb'] |// tei:rdg[contains(@wit,$rdg)]/tei:ptr[@type='emendation'][@ana='#textb']'
Forbidden variable
compilation error: file editions.xsl line 288 element key
xsl:key : 'match' pattern compilation failed '//tei:div/tei:ab/tei:ptr[@type='emendation'][@ana='#textb'] |// tei:rdg[contains(@wit,$rdg)]/tei:ptr[@type='emendation'][@ana='#textb']'
Traceback (most recent call last):
File "transform.py", line 21, in <module>
result = style.applyStylesheet(doc, None)
AttributeError: 'NoneType' object has no attribute 'applyStylesheet'
XSL-файл, который я использую, - here. Это профессионально создано, поэтому я не думаю, что с ним будут большие проблемы.
Есть ли способ переопределить эту ошибку, чтобы я мог преобразовать свой XML-файл в python? Или есть другой способ сделать это XSLT, где я не буду получать ошибки все время? Преобразование в браузере (Firefox) отлично работает, но я не могу заставить его работать на Python.
Как вы нашли эту ошибку? Вы знаете полезный валидатор? –
@MatthewWilcoxson: Хорошо, я посмотрел ваш журнал ошибок Python, в котором говорится, что в каждой строке от 283 до 288. есть ошибка «Запрещенная переменная». Затем я просмотрел строку 283 файла, чтобы найти запрещенную переменную. Кажется, это все, что вам нужно. – Borodin
Спасибо @Borodin, я не заметил вывод ошибки выше, надеялся, что вы использовали какой-то супердатчик для его поиска. ;) –