SMOOKS--XSL
1.简介
?
Smooks是一个用于出力XML和非XML数据(CVS,EDI,JAVA...)的JAVA可扩展框架。
?
主要有以下特性:
1)JAVA绑定:根据数据源(XML,CSV,EDI...)活得JAVA对象,亦可以实现JAVA对象到数据源的格式化。
2)转化:数据格式之间的转化,如XML-XML,CSV-XML...
3)大数据处理:能处理大型数据(GBs)-分割,转换,路由到JMS,文件,数据库等。
4)数据完整性填充:利用数据库等数据源填充数据。
5)复杂数据验证
6)基于ORM框架的数据存储:可以使用持久层框架(如Ibatis,Hibernate...)或者DAO读取或者存储数据。
7)可以将以上特性结合使用。
?
Smooks的工作是将结构化/层次化的数据流转变成“事件”流,然后交与“访问者逻辑(Visitor Logic)”进行分析,生成结果。而且Smooks本身提供了很多Vistor的实现来完成下面的功能:
1)JAVA绑定
2)数据分割和路由
3)大数据处理
?
本文将主要介绍Smooks通过XSL来实现XML之间的转换
?
2.结合XSL实现XML之间的转换
?
|-example
??? |-Xml2XmlXslTest.java
|-xslConfig.xml
|-xslConfig.xsl
|-input.xml
?
?xslConfig.xml
<?xml version="1.0"?><smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"xmlns:xsl="http://www.milyn.org/xsd/smooks/xsl-1.1.xsd"><xsl:xsl applyOnElement="Order"> <xsl:template>xslConfig.xsl</xsl:template> </xsl:xsl></smooks-resource-list>
?
?xslConfig.xsl
<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:preserve-space elements="*"/><xsl:template match="/Order"><ORDER><xsl:copy-of select="CUSTOMER" /><xsl:copy-of select="PAYMENT" /><ORDERITEM_LIST><xsl:for-each select="OrderItemList/OrderItem"><xsl:variable name="id"><xsl:value-of select="Product/Id"/></xsl:variable><xsl:choose><xsl:when test="Amount > 1"><ORDERITEM><PRODUCT><ID><xsl:value-of select="substring($id,3)"/></ID><NAME><xsl:value-of select="Product/Name"/></NAME><PRIZE><xsl:value-of select="Product/Prize"/></PRIZE></PRODUCT><AMOUNT><xsl:value-of select="Amount"/></AMOUNT></ORDERITEM></xsl:when><xsl:otherwise><ORDERITEM><PRODUCT><ID><xsl:value-of select="substring($id,3)"/></ID></PRODUCT></ORDERITEM></xsl:otherwise></xsl:choose></xsl:for-each></ORDERITEM_LIST></ORDER></xsl:template></xsl:stylesheet>
?
input.xml
?
<Order> <CUSTOMER> <username>USER</username> </CUSTOMER> <PAYMENT> <PRIZE>300</PRIZE> </PAYMENT> <OrderItemList> <OrderItem> <Product> <Id>001003</Id> <NAME>book1</NAME> <PRIZE>100</PRIZE> </Product> <Amount>2</Amount> </OrderItem> <OrderItem> <Product> <Id>001004</Id> <NAME>book2</NAME> <PRIZE>100</PRIZE> </Product> <Amount>1</Amount> </OrderItem> </OrderItemList></Order>
?
Xml2XmlXslTest.java
?
package example;import java.io.IOException;import javax.xml.transform.Result;import javax.xml.transform.Source;import javax.xml.transform.stream.StreamResult;import javax.xml.transform.stream.StreamSource;import org.milyn.Smooks;import org.xml.sax.SAXException;public class Xml2XmlXslTest {/** * @param args * @throws SAXException * @throws IOException */public static void main(String[] args) throws IOException, SAXException {Smooks smooks = new Smooks("xslConfig.xml");Source xmlSrc = new StreamSource(Xml2XmlXslTest.class.getResourceAsStream("/input.xml"));Result xmlRst = new StreamResult(System.out);smooks.filterSource(xmlSrc, xmlRst);}}
?
?
?