2011-03-29 16 views
8

संकलित नहीं कर सका मैं जावा में एक्सएसएलटी के साथ एक एक्सएमएल को बदलना चाहता हूं। इसके लिए मैं javax.xml.transform पैकेज का उपयोग कर रहा हूं। हालांकि, मुझे अपवाद javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet मिलता है। यह वह कोड है जिसका मैं उपयोग कर रहा हूं:जावा ट्रांसफार्मर त्रुटि: स्टाइलशीट

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(); 
} 

ध्यान दें कि मैंने अपवाद को फेंकने वाली रेखा को चिह्नित किया है।

जब मैं विधि में प्रवेश, XSLTRule का मूल्य यह है:

<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

आपने किस अपवाद को पकड़ लिया? –

+0

यह 'javax.xml.transform.Transformer कॉन्फ़िगरेशन अपवाद' है। मैंने अपनी मूल पोस्ट संपादित की, अब यह है। – Ivan

+0

आपका अंतिम टेम्पलेट खाली क्यों है? – Stephan

उत्तर

9

constructor

public StreamSource(String systemId) 

किसी URL से एक StreamSource का निर्माण। मुझे लगता है कि आप इसके बजाय एक्सएसएलटी की सामग्री पारित कर रहे हैं। इस प्रयास करें:

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

तुम भी OutputStream सेट करना होगा करने के लिए है कि अपने StreamResult लिखेंगे:

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

वैकल्पिक रूप से, बस 'नया स्ट्रीमसोर्स (एक्सएसएलट्रूलेट)' को 'नया स्ट्रीमसोर्स' (नया स्ट्रिंग रीडर (एक्सएसएलट्रूले) 'में बदलें' –

+0

बहुत बहुत धन्यवाद! लेकिन मुझे अभी भी 'परिणाम परिणाम = नया StreamResult();' के साथ कोई समस्या है। वहां क्या करना है? – Ivan

+0

@Ivan: परिणाम परिणाम = नया StreamResult(); 'के साथ आपके पास क्या समस्या है? – MarcoS

1

आप xslt स्ट्रिंग आपके पास से एक धारा contruct और फिर धारा के रूप में उपयोग करना होगा स्रोत

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

एक स्ट्रिंग के लिए परिणाम प्राप्त करने के लिए:

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    Result result = new StreamResult(bos); 
    transformer.transform(xmlInput, result); 
    String s = new String(bos.toByteArray()); 
    System.out.println(s); 
+0

बहुत बहुत धन्यवाद! लेकिन मुझे अभी भी 'परिणाम परिणाम = नया StreamResult();' के साथ कोई समस्या है। वहां क्या करना है? – Ivan

+0

मैंने उस कोड को उत्तर में जोड़ा है। – Nishan

0

एक्सएसएलटीसी का उपयोग करने के लिए, xalan.jar (2.5), serializer.jar, xml-apis.jar, और xercesImpl.jar को अपने क्लासपाथ पर रखें।

+0

ऐसा मत करो। उन सभी पैकेजों (Xerces प्रोजेक्ट से) 2010 से छोड़ दिया गया है। कोड अब जेवीएम में रहता है। – Lambart

संबंधित मुद्दे