加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用xslt转换xml并在Android webview中显示它

发布时间:2020-12-16 07:41:23 所属栏目:百科 来源:网络整理
导读:我试图将由xsl文件转换的xml数据显示在 Android应用程序的webview中.但是,数据未按预期显示. XML file used (cdcatalog_with_xsl.xml) -- Sample xml data--------------------------------------?xml version="1.0" encoding="ISO-8859-1"??xml-stylesheet
我试图将由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;

}

}

输出:

我希望这对所有人都有帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读