问题描述
我正在尝试将通过 xsl 文件转换的 xml 数据显示到 Android 应用程序的 webview 上.但是,数据未按预期显示.
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.
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 中吗?
Would some body help me with a sample code to load this data into webview of Android app?
推荐答案
这很棘手,我尽量让它易于理解.只需按照以下步骤操作_
Its quite tricky, i try to make it easy to understand. Just follow below steps_
- 在 res/raw 下构建您的 XSLT 文件,
- 解析您的 XML 或准备好您的 XML(在 res/raw)
- 最后,使用这些以在 Android Webview 中显示
您的cdcatalog_with_xsl.xml
&cdcatalog.xsl
必须在 res/raw
中.我已经构建了 LoadXSLTinWebview 来满足您的需求_
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;
}
}
输出:
希望对大家有所帮助!
这篇关于如何用xslt转换xml并在Android webview中显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!