使用xslt

来源:互联网 发布:page.class.php array 编辑:程序博客网 时间:2024/05/21 03:19

原来作页面展现的时候,通过使用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"?>

原创粉丝点击