使用xslt

本文介绍了一种利用XSLT直接将XML数据转换为HTML表格的方法,避免了传统编程中解析XML和创建model对象的过程。该方法适用于不确定具体展示字段的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原来作页面展现的时候,通过使用list标签来排版保存在Scope中的数据对象,这种方法虽然也简洁、符合编程习惯,唯一的不好处就是存在一个model。最近在一个门户网站的实施的过程中,用到了别的系统WebService数据,正好他们的返回数据是xml格式的String。而对方的model我们是无法控制的、客户最终要展现哪些model的属性也尚未确定。于是在别人的提醒下,想到了XSLT能够直接将数据展现出来,中间免去了解析xml和建立model的麻烦,而且不用调出原来的list标签,以免给人留下话资。。。

闲话少说,描述下使用的过程:

1、CXF接受第三方系统的数据(XML),此时需要建立一个与第三方系统方法一样的Proxy接口。省略

2、新建xsl展现模板

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
    <table width="100%" cellpadding="3" cellspacing="1">
      <colgroup>
        <col width="400"/><col width="250"/><col width="320"/><col width="80"/>
      </colgroup>
      <xsl:for-each select="root/productlist/product">
      <tr>
        <td class="product-list-content"> <xsl:value-of select="productName" /> </td>
        <td class="product-list-content"> <xsl:value-of select="prodTypeName" /> </td>
        <td class="product-list-content"> <xsl:value-of select="insurerName" /> </td>
        <td>
          <a target="_blank">
            <xsl:attribute name="href">/wps/myportal/fanhua/chanpinyufuwu/productmarket/detail?productId=<xsl:value-of select="productId"/></xsl:attribute>查看
          </a>
        </td>
      </tr>
      </xsl:for-each>
    </table>
    <script language="javascript">var totalPages = <xsl:value-of select="root/pageCount"/></script>
</xsl:template>

</xsl:stylesheet>

3、使用jaxp来转换xml,

public static String parseHtmlCode(String xmlContent, String xsl){
  StringWriter writer = new StringWriter();
  StringReader reader = new StringReader(xmlContent);

  StreamSource style = new StreamSource(
    XmlTransfer.class.getClassLoader().getResourceAsStream(xsl) );
  String verstr = "<?xml version=/"1.0/" encoding=/""+XML_ENCODING+"/"?>";
  try {
   Transformer transformer = TransformerFactory.newInstance().newTransformer(style);
   transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, XML_ENCODING);
   transformer.transform(new StreamSource(reader), new StreamResult(writer));
   
   String htmlCode = writer.toString();

   if (htmlCode.startsWith(verstr)){
     htmlCode = htmlCode.substring(verstr.length());
   }
   writer.close();
   reader.close();
   return htmlCode;
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }finally{
      writer = null;
      reader = null;
  }
 }

 

 

附录:如果是IE下,也就不用第三步,可以直接将xml字符串保存为一个文件,在<?xml ?>行下添加下面这句就可以直接显示:

<?xml-stylesheet type="text/xsl" href="productList.xsl"?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值