Как установить значение контекста web.xml, используя XSLT и ANT? - PullRequest
1 голос
/ 19 января 2012

Я ищу фрагмент 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>

Планируется использовать сценарий ANT с задачей XSLT, проблема в том, что я не знаю XSLT. Мне нужно иметь возможность изменять элемент param-value, только если имя-параметра равно dojoUrl

1 Ответ

5 голосов
/ 19 января 2012
<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> с другим путем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...