如何在spring中配置java.xml.transform.transformer

时间:2009-11-10 02:36:18

标签: spring

如何在spring框架中配置java.xml.transform.Transformer?我需要变换器的实例来通过xslt将xml转换为文本。因此,配置的变换器应该具有xslt样式表的知识是至关重要的。我没有在web项目中使用它,而是在独立的java程序中使用它。

3 个答案:

答案 0 :(得分:5)

嗯,配置Transformer的Java是这样的:

Source stylesheetSource = new StreamSource(new File("/path/to/my/stylesheet.xslt"));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(stylesheetSource);

如果你真的想纯粹在Spring XML中这样做,那就等同于:

<bean id="stylesheetSource" class="javax.xml.transform.stream.StreamSource">
    <property name="systemId" value="/path/to/my/stylesheet.xslt"/>
</bean>

<bean id="transformerFactory" class="javax.xml.transform.TransformerFactory" factory-method="newInstance"/>

<bean id="transformer" factory-bean="transformerFactory" factory-method="newTransformer">
    <constructor-arg ref="stylesheetSource"/>
</bean>

答案 1 :(得分:2)

您需要从适当的Transformer获取TransformerFactory的实例。您可以使用内置的xerces变压器工厂或第三方XSLT处理器,例如saxonica

使用Spring的IoC,您可以像这样配置Xerces XML转换器:

<bean id="transformerFactory" class="org.apache.xerces.jaxp.SAXParserFactoryImpl" />

或像这样的撒克逊XML变换器:

<bean id="transformerFactory" class="net.sf.saxon.TransformerFactoryImpl" />

一旦有了TransformerFactory,就可以使用依赖注入来获取bean内部或使用IoC的新变换器实例。切换到您的课程内部您可能会有一些属性,例如您需要设置的transFact

<bean id="myBean" class="myClass">
   <property name="transFact" ref="transformerFactory" />
</bean>

然后在你的课堂上:

public class myClass {
    // ...

    private javax.xml.transformer.TransformerFactory transFact;


    public void myMethod(){
      StreamSource transformerStream = new StreamSource(getResourceAsStream(pathToXslt));
      javax.xml.transformer.Transformer myTrans = transFact.newTransformer(transformerStream);
      // now you've got a myTrans
    }

    // ...

    public setTransFact(javax.xml.transformer.TransformerFactory transFact){
      this.transFact = transFact;
    }
}

或者,您可以使用factory-method在IoC中获得一个新的变压器,但需要更多努力。

答案 2 :(得分:2)

我发现这样可以从类路径中提供xsl文件:

<bean id="errorLogTransformer" factory-bean="transformerFactory" factory-method="newTransformer" >
    <constructor-arg>
        <bean class="org.springframework.xml.transform.ResourceSource">
            <constructor-arg>
                <value>classpath:errorLog.xsl</value>
            </constructor-arg>
        </bean>
    </constructor-arg>
</bean>

非常难看,但它确实有用!