2013-05-22 7 views
45

Guten Tag! Sie müssen xml mit xslt in Python konvertieren. Ich habe einen Beispielcode in PHP.Wie transformiere ich eine XML-Datei mit XSLT in Python?

Wie dies in Python zu implementieren oder wo etwas ähnliches zu finden? Vielen Dank!

$xmlFileName = dirname(__FILE__)."example.fb2"; 
$xml = new DOMDocument(); 
$xml->load($xmlFileName); 

$xslFileName = dirname(__FILE__)."example.xsl"; 
$xsl = new DOMDocument; 
$xsl->load($xslFileName); 

// Configure the transformer 
$proc = new XSLTProcessor(); 
$proc->importStyleSheet($xsl); // attach the xsl rules 
echo $proc->transformToXML($xml); 

Antwort

72

lxml Verwendung,

import lxml.etree as ET 

dom = ET.parse(xml_filename) 
xslt = ET.parse(xsl_filename) 
transform = ET.XSLT(xslt) 
newdom = transform(dom) 
print(ET.tostring(newdom, pretty_print=True)) 
+4

Hallo, ich habe noch eine Frage hier. Wenn die XML-Datei groß ist, ist die Effizienz von "newdom = transform (dom)" sehr schlecht. Ich habe versucht, eine große XML-Datei (> 100 MB) zu parsen, es wird eine lange Zeit (> 4 Stunden) dauern, um zu transformieren. Hast du irgendeinen guten Rat bezüglich der Umwandlung von XML-Dateien mit xslt mit python lxml? – KevinLeng

+2

Unter der Haube verwendet lxml [libxslt] (http://xmlsoft.org/XSLT/), um das XML zu transformieren. Ich weiß nichts, was Sie tun können, um dies zu beschleunigen. Wenn Sie Ihre XSLT in einer neuen Frage veröffentlichen, kann jemand eine Verbesserung vorschlagen. – unutbu

+0

Danke. Ich habe versucht, schreiben ohne Glück. Wie schreibt man Inhalte in eine Datei? – programiss

5

LXML ist eine weit verbreitete Hochleistungs-Bibliothek für die XML-Verarbeitung in Python basierend auf libxml2 und libxslt - es umfasst Einrichtungen für XSLT as well.

0

Der beste Weg ist, es zu tun lxml verwenden, aber es unterstützt nur XSLT 1

import os 
import lxml.etree as ET 

inputpath = "D:\\temp\\" 
xsltfile = "D:\\temp\\test.xsl" 
outpath = "D:\\output" 


for dirpath, dirnames, filenames in os.walk(inputpath): 
      for filename in filenames: 
       if filename.endswith(('.xml', '.txt')): 
        dom = ET.parse(inputpath + filename) 
        xslt = ET.parse(xsltfile) 
        transform = ET.XSLT(xslt) 
        newdom = transform(dom) 
        infile = unicode((ET.tostring(newdom, pretty_print=True))) 
        outfile = open(outpath + "\\" + filename, 'a') 
        outfile.write(infile) 

XSLT 2 verwenden Sie können Optionen prüfen, aus Use saxon with python

Verwandte Themen