2011-03-29 4 views
8

XML'de XSLT ile bir XML dönüştürmek istiyorum. Bunun için javax.xml.transform paketini kullanıyorum. Ancak, istisna olsun. Ben istisna atar çizgi işaretliJava Transformer hatası: Stil sayfası oluşturulamadı

public static String transform(String XML, String XSLTRule) throws TransformerException { 

    Source xmlInput = new StreamSource(XML); 
    Source xslInput = new StreamSource(XSLTRule); 

    TransformerFactory tFactory = TransformerFactory.newInstance(); 
    Transformer transformer = tFactory.newTransformer(xslInput); // this is the line that throws the exception 

    Result result = new StreamResult(); 
    transformer.transform(xmlInput, result); 

    return result.toString(); 
} 

Not: Bu kullanıyorum kodudur. Ben yöntemini girdiğinizde

, XSLTRule değeri şudur:

<xsl:stylesheet version='1.0' 
xmlns:xsl='http://www.w3.org/1999/XSL/Transform' 
xmlns:msxsl='urn:schemas-microsoft-com:xslt' 
exclude-result-prefixes='msxsl' 
xmlns:ns='http://www.ibm.com/wsla'> 
    <xsl:strip-space elements='*'/> 
    <xsl:output method='xml' indent='yes'/> 
    <xsl:template match='@* | node()'> 
     <xsl:copy> 
      <xsl:apply-templates select='@* | node()'/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="/ns:SLA 
          /ns:ServiceDefinition 
           /ns:WSDLSOAPOperation 
            /ns:SLAParameter[@name='Performance']"/> 
</xsl:stylesheet> 
+0

Wich istisnası yakaladınız mı? –

+0

Bu "javax.xml.transform.TransformerConfigurationException" dır. Orijinal gönderimi düzenledim, şimdi var. – Ivan

+0

Niçin son şablonunuz boş? – Stephan

cevap

9

constructor

public StreamSource(String systemId) 

bir URL'den StreamSource'a Construct. Bunun yerine XSLT'nin içeriğini geçtiğinizi düşünüyorum. Bu deneyin: Sen sahip xslt dizesinden bir dere contruct ve sonra akışı olarak kullanmak zorunda kalacak

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
Result result = new StreamResult(baos); 
transformer.transform(xmlInput, result); 
return baos.toString(); 
+3

Alternatif olarak, yeni StreamSource (XSLTRule) 'i' 'yeni StreamSource (yeni StringReader (XSLTRule))' –

+0

'a çok değiştirin! ama hala sonuç = yeni StreamResult(); 'ile ilgili bir sorunum var. Orada ne yapmalı? – Ivan

+0

@Ivan: 'Sonuç sonucu = yeni StreamResult(); 'ile ne gibi bir sorunun var? – MarcoS

1

:

File xslFile = new File("path/to/your/xslt"); 
TransformerFactory factory = TransformerFactory.newInstance(); 
Templates xsl = factory.newTemplates(new StreamSource(xslFile)); 

Ayrıca sizin StreamResult yazacak o OutputStream ayarlamalısınız kaynak

InputStream xslStream = new ByteArrayInputStream(XSLTRule.getBytes("UTF-8")); 
Source xslInput = new StreamSource(xslStream); 

bir dizeye sonuç almak için:

+0

çok teşekkürler! ama hala sonuç = yeni StreamResult(); 'ile ilgili bir sorunum var. Orada ne yapmalı? – Ivan

+0

Bu kodu cevaba ekledim. – Nishan

0

XSLTC'yi kullanmak için, sınıf yolunuza xalan.jar (2.5), serializer.jar, xml-apis.jar ve xercesImpl.jar komutlarını yerleştirin.

+0

Bunu yapma. Tüm bu paketler (Xerces projesinden) 2010'dan beri terk edildi. Kod şimdi JVM'de yaşıyor. – Lambart