2010-07-28 2 views
1

lxml.etree.XSLT을 사용하여 DocBook 문서에서 XSL 변환을 수행하고 싶습니다.상대 경로가있는 다른 스타일 시트가 포함 된 원격 스타일 시트 사용

설명서에 etree.XSLT()이 첫 번째 매개 변수 xslt_input을 사용한다고 나와 있지만이 매개 변수가 의미하는 문서를 찾을 수 없습니다. 그것을 읽기 위해 열려있는 파일을 전달하는 것 같습니다; 문자열에 파일 이름을 전달하지 않습니다.

편집 정상 검사를 마친 후 etree.XSLT은 구문 분석 된 etree._ElementTree을 인식했습니다. 그래서. . . 어쩌면 요소 트리를 상대 경로 매핑에 사용할 경로를 파싱하는 방법이 있을까요? . . . 조사 중이다.

전달 된 XML 파일에 다른 파일이 포함되어 있으면 해당 포함 문에서 상대 경로가 현재 작업 디렉토리에서 가져옵니다.

이 클래스를 사용하여 DocBook 문서를 변환하고 DocBook XSL에 원격으로 액세스하는 것을 선호합니다. Docbook XSL은 꽤 복잡하고 수많은 다른 파일을 포함합니다. etree.XSLT이 원격 위치에서이 파일을 가져올 수있는 방법이 있습니까?

답변

0

xslt_input 인수에는 XSL 문서가 필요합니다.

여기 http://snipplr.com/view/19433/lxml-xslt/에서 사용의 조각입니다 :

from lxml.etree import XSLT,fromstring 

xml = fromstring("<a key='value'>ez</a>") 
xsl= fromstring("""<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method = "html" version="1.0" encoding="UTF-8" omit-xml-declaration="yes" standalone="yes" indent="no" /> 

    <xsl:template match="a"> 
     <xsl:value-of select="@key"/> 
    </xsl:template> 

</xsl:stylesheet>""") 

style = XSLT(xsl) 
result = style.apply(xml) 
print style.tostring(result) 
+0

나는 그 질문을 이해하지 못했다고 생각합니다. 필자는 XSLT 객체에 최상위 수준 XSL 파일의 include/import 문에서 사용되는 상대 경로를 확장하는 방법을 설명해야합니다. – intuited

+0

아마도 거기에있을 수 있습니다. 질문은 주로 __init__ 메쏘드에 전달되어야하는 것에 관한 것이라고 생각했습니다. –

1

이 실제로 죽은 간단합니다, 그냥 정신 소화 불량이 있고,이 있었다는 것을 잊고 그 XSL 스타일 시트를 구문 분석의 가장 중요한 중간 단계. 이 시점에서 스타일 시트의 기본 URL을 알 수 있습니다.

URL에서 스타일 시트를 가져 오는 경우 URL에서 스타일 시트를 차감하면됩니다. 나는 이것이 처음에는 옵션 이었음을 깨닫지 못했다. 그것은 나의 혼란의 시작 이었을지 모른다.

그렇지 않으면 base_url 매개 변수를 통해 위치를 전달할 수 있습니다. 3 단계에서

:

>>> xsl_url = 'http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl' 
>>> document = 'path/to/document.xml' 
>>> output_filename = 'path/to/transformed-document.xhtml' 
>>> from lxml import etree 
>>> transform = etree.XSLT(etree.parse(xsl_url)) 
>>> with open(document) as f: 
>>>  transformed_document = transform(etree.parse(f)) 
>>> transformed_document.write(output_filename) 

자보세요!

로컬 파일에서 스타일 시트 etree을 초기화하는 것은 대부분 URL을 전달할 수 없다는 것을 인식하지 못했기 때문입니다.

+0

'etree.parse'에 대한 전체 문서는 [여기] (http://codespeak.net/lxml/api/lxml.etree-module.html#parse) 인 것 같습니다. – intuited

관련 문제