2015-02-01 2 views
0

Я хочу автоматизировать добавление объявлений Spring с использованием Maven, т.е. добавления узлов bean к существующему XML-документу.Как добавить новый узел в существующий XML-документ с помощью maven?

Я попытался использовать плагин AntRun с xmltask без успеха: beans.xml дублируется без вставки элемента элемента bean.

Теперь я возвращаюсь к использованию плагина maven XML с преобразованием XSL и по-прежнему не в состоянии выполнить свою задачу с помощью этого решения: beans.xml дублируется без вставки элемента элемента bean.

Ставки на мои недостатки в знаниях об обработке XML, я читал здесь и там, но я не могу понять, что мне не хватает.

Я использую следующий POM декларацию для настройки Maven XML плагин:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>xml-maven-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>transform</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <transformationSets> 
     <transformationSet> 
      <dir>${basedir}/src/main/resources/spring</dir> 
      <excludes> 
      <exclude>spring-context.xml</exclude> 
      </excludes> 
      <stylesheet>${basedir}/templates/xslt/spring-stylesheet.xslt</stylesheet> 
     </transformationSet> 
     </transformationSets> 
    </configuration> 
    <dependencies> 
     <dependency> 
     <groupId>net.sf.saxon</groupId> 
     <artifactId>saxon</artifactId> 
     <version>8.7</version> 
     </dependency> 
    </dependencies> 
    </plugin> 

И следующая таблица стили, чтобы настроить преобразование XML

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns="http://www.springframework.org/schema/beans" 
version="2.0"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="beans"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | *"/> 
     <xsl:element name="bean"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

Я получаю следующий файл (который является точной копией моего исходного документа)

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 
    <bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> 
     <property name="location" value="classpath:properties/db.properties"/> 
    </bean> 
    <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     id="dataSource"> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="driverClassName" value="${jdbc.driverClassName}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    </bean> 
    <bean class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" 
     id="sessionFactory"> 
     <property name="dataSource"> 
     <ref bean="dataSource"/> 
     </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">true</prop> 
     </props> 
     </property> 
     <property name="mappingLocations"> 
     <value>classpath:hibernate/queries.hbm.xml</value> 
     </property> 
    </bean> 
    <bean class="org.springframework.orm.hibernate4.HibernateTransactionManager" 
     id="txManager"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" 
     id="persistenceExceptionTranslationPostProcessor"/> 
</beans> 

Может кто-нибудь указать что здесь не так, или предложите другой способ добавления к ресурсу XML с помощью Maven?

ответ

1

Использование

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns="http://www.springframework.org/schema/beans" 
xpath-default-namespace="http://www.springframework.org/schema/beans" 
version="2.0"> 

если у вас есть процессор XSLT 2.0, как Saxon 9. С процессором XSLT 1.0, как Xalan вам нужен

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:sb="http://www.springframework.org/schema/beans" 
    version="1.0"> 

    <xsl:template match="sb:beans"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | *"/> 
     <bean/> 
    </xsl:copy> 
    </xsl:template> 

С текущей кодой match="beans" соответствует только элементам с местным имя beans без пространства имен.

+0

Теперь я получаю его сейчас, и он действительно работает, спасибо. – guitaristooexpensive

Смежные вопросы