How to transform xml with xslt and display it in Android webview

后端 未结 1 1838
小鲜肉
小鲜肉 2020-12-17 00:08

I am trying to display the xml data, which was transformed by xsl file, onto the webview in an Android application. However, the data is not displayed as expected.

相关标签:
1条回答
  • 2020-12-17 00:31

    Its quite tricky, i try to make it easy to understand. Just follow below steps_

    1. Build your XSLT file under res/raw,
    2. either parse your XML or be ready with your XML(in res/raw)
    3. Finally, consume these to display in Android Webview

    your cdcatalog_with_xsl.xml & cdcatalog.xsl must be there in res/raw. I have build LoadXSLTinWebview that servers your need_

    public class LoadXSLTinWebview extends Activity {
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        getWindow().requestFeature(Window.FEATURE_PROGRESS);
    
        WebView webview = new WebView(this);
        setContentView(webview);
    
        //Reading XSLT
        String strXSLT = GetStyleSheet(R.raw.cdcatalog);
        //Reading XML
        String strXML = GetStyleSheet(R.raw.cdcatalog_with_xsl);
        /*
         * Loading XSLT...
         */
          //Transform ...
          String html=StaticTransform(strXSLT, strXML);
          //Loading the above transformed CSLT in to Webview...
          webview.loadData(html,"text/html",null);
    
    }
    
    /*
     * Transform XSLT to HTML string
     */
    public static String StaticTransform(String strXsl, String strXml) {
        String html = "";
    
        try {
    
            InputStream ds = null;
            ds = new ByteArrayInputStream(strXml.getBytes("UTF-8"));
    
            Source xmlSource = new StreamSource(ds);
    
            InputStream xs = new ByteArrayInputStream(strXsl.getBytes("UTF-8"));
            Source xsltSource = new StreamSource(xs);
    
            StringWriter writer = new StringWriter();
            Result result = new StreamResult(writer);
            TransformerFactory tFactory = TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer(xsltSource);
            transformer.transform(xmlSource, result);
    
            html = writer.toString();
    
            ds.close();
            xs.close();
    
            xmlSource = null;
            xsltSource = null;
    
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        return html;
    }
    
    /*
     * Read file from res/raw...
     */
    private String GetStyleSheet(int fileId) {
        String strXsl = null;
    
            InputStream raw = getResources().openRawResource(fileId);
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            int size = 0;
            // Read the entire resource into a local byte buffer.
            byte[] buffer = new byte[1024];
            try {
                while ((size = raw.read(buffer, 0, 1024)) >= 0) {
                    outputStream.write(buffer, 0, size);
                }
                raw.close();
    
                strXsl = outputStream.toString();
    
                Log.v("Log", "xsl ==> " + strXsl);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        return strXsl;
    
    }
    
    }
    

    OutPut:

    output

    I hope this will help all!

    0 讨论(0)
提交回复
热议问题