2012-01-23 41 views
5

Trong python 2,6 Tôi đã làm điều này để đạt được một tranform xslPython3 và xml/XSLT thư viện

import libxml2 
    import libxslt 
    ... 
    styledoc = libxml2.parseFile(my_xslt_file) 
    style = libxslt.parseStylesheetDoc(styledoc) 
    doc = libxml2.parseDoc(siri_response_data) 
    result = style.applyStylesheet(doc, None) 
    ... 

Điều gì sẽ là tương đương với bằng Python 3.2?

Tôi hỏi vì có vẻ như lnxml và libxslt không có sẵn trong python3.2. Tôi đã nghe nói về lxml - đây là một tương đương trực tiếp của libxml2 + libxslt hay nó có các mẫu gọi khác nhau (cần phải viết lại mã)?

+0

Tôi nghĩ libxml2 thư viện/XSLT hiện cung cấp bindings Python3 qua '/ tranh luận kịch bản configure'' - with-python = $ {PATH_TO_PYTHON3_BINARY} ', ví dụ:'/usr/bin/python3'. – kevinarpe

Trả lời

1

Vì các thư viện chỉ là hàm bao quanh C-thư viện họ không nên rất khó để cổng để Python 3.

Chỉ khác thay thế là lxml, trong đó có một giao diện của các loại ElementTree, vì vậy mức độ cao hơn và nhiều hơn nữa "pythonic". Tôi không nghĩ rằng nó cung cấp một giao diện trực tiếp cho các thư viện.

+0

Trong khi tôi đồng ý với tình cảm của câu trả lời này, trong thực tế nó đã không được chứng minh dễ dàng như vậy đối với tôi hoặc người khác để thực hiện. Tuy nhiên tôi sống với hy vọng! –

2

Các analog của mã của bạn sử dụng lxml:.

from lxml import etree 

# ...  
styledoc = etree.parse(my_xslt_file) 
transform = etree.XSLT(styledoc) 
doc = etree.fromstring(siri_response_data) 
result = transform(doc) 
# ... 

lxml danh sách hỗ trợ cho Python 3.2

+0

Một gợi ý hữu ích hoạt động - nhưng (cho đến nay) không tạo ra kết quả tương tự như kết quả từ tuyến libxml2/libxslt. Tuy nhiên phương pháp này không tạo ra rò rỉ bộ nhớ - trong khi mã trong câu hỏi của tôi bị rò rỉ như một cái sàng! Tôi sẽ điều tra thêm điều này. Cảm ơn của tôi –

+0

['lxml' sử dụng' libxml2/libxslt' dưới mui xe] (http://lxml.de/installation.html) vì vậy kết quả sẽ giống nhau. Nó sử dụng Cython để tạo các phần mở rộng C hoạt động cả trên Python 2.x và 3.x từ cùng một nguồn, [ví dụ] (https://github.com/lxml/lxml/blob/master/src/lxml/tree. pxd). – jfs

Các vấn đề liên quan