2013-05-01 31 views
6

xslファイルで変換されたxmlデータをAndroidアプリケーションのwebviewに表示しようとしています。ただし、データが期待どおり表示されません。xsltでxmlを変換してAndroid webviewに表示する方法

XML file used (cdcatalog_with_xsl.xml) -- Sample xml data 
-------------------------------------- 
<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?> 
<!-- Edited by XMLSpy® --> 
<catalog> 
    <cd> 
     <title>Empire Burlesque</title> 
     <artist>Bob Dylan</artist> 
     <country>USA</country> 
     <company>Columbia</company> 
     <price>10.90</price> 
     <year>1985</year> 
    </cd> 
    <cd> 
     <title>Hide your heart</title> 
     <artist>Bonnie Tyler</artist> 
     <country>UK</country> 
     <company>CBS Records</company> 
     <price>9.90</price> 
     <year>1988</year> 
    </cd> 
</catalog> 


XSL file used (cdcatalog.xsl) -- Sample xsl file 
----------------------------- 
<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- Edited by XMLSpy® --> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>My CD Collection</h2> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th>Title</th> 
     <th>Artist</th> 
     </tr> 
     <xsl:for-each select="catalog/cd"> 
     <tr> 
     <td><xsl:value-of select="title"/></td> 
     <td><xsl:value-of select="artist"/></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

このデータをAndroidアプリのwebviewに読み込むためのサンプルコードがありますか?

+0

予想される出力の詳細については、おそらくもっと具体的なものにする必要があります。 – Henrik

+0

私は出力のスクリーンショットをアップロードすることはできません...しかし、期待されるのは、xmlの2列と2列のデータを持つ表を表示することです。 –

答えて

10

非常に扱いにくいですが、わかりやすいようにしています。ただ、AndroidのWebViewの中で表示するには、これらを消費し、最後に

  • (生RES /に)あなたのXMLを解析したり、XMLと準備ができてどちらか
  • 、生のres /の下に、あなたのXSLTファイルをビルドしsteps_

    の下
    1. に従ってください

    あなたcdcatalog_with_xsl.xml & cdcatalog.xslres/rawに存在する必要があります。私は、サーバーのあなたの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

    は、私は、これはすべてを助けることを願っていますLoadXSLTinWebviewを構築する必要があります!

  • +0

    はい、これは私を大いに助けます。これを投稿してくれてありがとうございます。 –

    +0

    この回答ありがとうございます! onCreateでXMLとXSLを変更したことに気付いただけです。これを変更する必要があります。初めてこのコードを試してみましたが、動作していませんでした。 2つの文字列名の唯一の変更;) –

    関連する問題