2013-05-22 14 views
45

İyi günler! Python'da xslt kullanarak xml dönüştürmek gerekiyor. Php'de örnek bir kod var.Python'da XSLT kullanarak bir XML dosyası nasıl dönüştürülür?

Python'da veya benzer bir şeyi nerede bulabilirim? Teşekkür ederim!

$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); 

cevap

72

,

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

gelen seçenekleri kontrol edebilirsiniz XSLT 2 kullanımı XSLT desteklemek Merhaba, burada bir sorum daha var. Xml dosyası büyükse, "newdom = transform (dom)" verimliliği çok kötü. Büyük bir xml dosyasını (> 100MB) ayrıştırmaya çalıştım, dönüşüm için uzun bir zamana (> 4 saat) mal olacak. Xml dosyasını xslt ile python lxml kullanarak dönüştürmenin iyi bir tavsiyesi var mı? – KevinLeng

+2

Kaputun altında, lxml XML'i dönüştürmek için [libxslt] (http://xmlsoft.org/XSLT/) kullanıyor. Bunu hızlandırmak için yapabileceğiniz hiçbir şey bilmiyorum. Belki de XSLT'nizi yeni bir soruya gönderirseniz, birisi bir gelişme önerebilir. – unutbu

+0

Teşekkürler. Şanssız yazmayı denedim. İçeriği dosyaya nasıl yazarsınız? – programiss

5

LXML libxml2'nin ve libxslt'nin dayalı Python XML işleme için yaygın olarak kullanılan yüksek performanslı kütüphane - bu XSLT as well için tesisleri içerir. lxml kullanma

0

iyi yolu LXML kullanarak bunu yapmak için, ama sadece 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) 

Eğer Use saxon with python