如何使用XSLT和ANT设置web.xml context-param的值?

时间:2012-01-18 21:26:39

标签: xslt ant

我正在寻找一个XSLT片段,它可以修改一个context-param元素的值,该元素是典型的web.xml文件。在我的web.xml中,我有以下上下文参数

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>App Name</display-name>
 <context-param>
    <param-name>dojoUrl</param-name>
    <param-value>/dojo/src/1.7.1/dojo/dojo.js</param-value>
 </context-param>
</web-app>

我想要做的是将生产的上下文参数的值更改为

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>App Name</display-name>
 <context-param>
    <param-name>dojoUrl</param-name>
    <param-value>/dojo/1.7.1/dojo/dojo.js</param-value>
 </context-param>
</web-app>

计划是使用带有XSLT任务的ANT脚本,问题是我不知道XSLT。只有当param-name为dojoUrl时,我才能更改param-value元素

1 个答案:

答案 0 :(得分:5)

<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:w="http://java.sun.com/xml/ns/javaee"
>
  <xsl:output indent="yes" />

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

  <xsl:template match="w:context-param[w:param-name='dojoUrl']/w:param-value">
    <xsl:copy>/dojo/1.7.1/dojo/dojo.js</xsl:copy>
  </xsl:template>
</xsl:stylesheet>

简短说明:

第一个模板将每个XML节点复制到与任何其他模板不匹配的输出(它称为身份模板,如果您感兴趣,请查找它。)

第二个模板专门匹配<w:param-value>元素的<w:context-param>个孩子与w:param-name 'dojoUrl'。它输出一个具有不同路径的新<w:param-value>