我正在寻找一个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元素
答案 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>
。