我正在尝试将由 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
中/em>。我构建了满足您需求的 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, 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;
}
}
输出:
希望对大家有所帮助!
关于xml - 如何用xslt转换xml并在Android webview中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16318998/