我试图将由xsl文件转换的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中吗?
它非常棘手,我试着让它易于理解.请按照以下步骤_
>在res / raw下构建您的XSLT文件,
>要么解析你的XML,要么准备好你的XML(res / raw)
>最后,使用这些消息在Android Webview中显示
你的cdcatalog_with_xsl.xml& cdcatalog.xsl必须在res / raw中.我已经构建了LoadXSLTinWebview来满足您的需求_
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,1024)) >= 0) { outputStream.write(buffer,size); } raw.close(); strXsl = outputStream.toString(); Log.v("Log","xsl ==> " + strXsl); } catch (IOException e) { e.printStackTrace(); } return strXsl; } }
输出:
我希望这对所有人都有帮助!