2

XSLT を使用して XML を XHTML に変換しようとしています。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

また、libxslt を使用するこの python scriptを使用してみましたが、次のエラーが表示されます。

    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 ファイルはこちらです。プロが作ったものなので、大きな問題はないと思います。

XML ファイルを Python で変換できるように、このエラーをオーバーライドする方法はありますか? または、常にエラーが発生しないこの XSLT を実行する別の方法はありますか? ブラウザ (Firefox) での変換は正常に機能しますが、Python では機能しません。

4

1 に答える 1

4

残念ながら、あなたの契約者はあなたを失望させました。XSLT 仕様では、セクション 12.2で次のように述べています。

use 属性または match 属性のいずれかの値に VariableReference が含まれていると、エラーになります。

そのため、 のkey283 行目から 288 行目の要素は、属性がパス step を使用しているeditions.xslため、有効な XSLT ではありません。matchtei:rdg[contains(@wit,$rdg)]

幸いなことに、$rdgは 183 行で定義されている単純な定数であり、代わりに'lemma'このパス ステップの 6 つのオカレンスすべてを に変更すると、すべてうまくいくはずです。tei:rdg[contains(@wit,'lemma')]

于 2013-05-19T21:52:26.607 に答える