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);
	}
} 相关推荐
  与卿画眉共浮生    2020-10-14  
   xiyang    2020-08-21  
   baijinswpu    2020-07-29  
   leonranri    2020-07-26  
   zhongliwen    2020-07-05  
   麋鹿麋鹿迷了路    2020-07-05  
   zengyu00    2020-07-05  
   XGQ    2020-07-04  
   CoderBoy    2020-06-28  
   whbing    2020-06-28  
   绝望的乐园    2020-06-27  
   wellfly    2020-06-26  
   菇星獨行    2020-06-25  
   草原孤狼    2020-06-25  
   坚持着执着    2020-06-16  
   wcqwcq    2020-06-14  
   yuanye0    2020-06-14  
   zhongliwen    2020-06-13  
   MrFuWen    2020-06-09