0

有这样一个要求:

将以下 serverlet 插入到 web.xml(如果还没有的话):

  <servlet>
   <description>My Servlet</description>
   <servlet-name>myServlet</servlet-name>
   <servlet-class>com.tom.servlet.MyServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/servlet/myServlet/*</url-pattern>
  </servlet-mapping>

我在我的 ant 脚本中使用XMLTask

尝试了以下脚本,但失败了:

<xmltask source="${env.My_HOME}/WEB-INF/web.xml" dest="${env.My_HOME}/WEB-INF/web.xml" report="false">
        <copy property="servletfound" path="/web-app/servlet[servlet-name='myServlet']/text()" />
        <insert unless="servletfound" path="/web-app/servlet[last()]" position="after">
            <![CDATA[
            <servlet>
   <description>My Servlet</description>
   <servlet-name>myServlet</servlet-name>
   <servlet-class>com.tom.servlet.MyServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/servlet/myServlet/*</url-pattern>
  </servlet-mapping>
        ]]>
        </insert>
    </xmltask>

我的问题是如何检测 servlet 是否存在,因为我应该避免插入两次。听起来我的 xpath 语法不正确。请帮忙。

4

1 回答 1

0

您尝试过的 Xpath:

/web-app/servlet[servlet-name='myServlet']/text()

...返回文本节点,它是 的直接子<servlet>节点,在发布的 XML 示例中不存在。如果您打算返回直接子<servlet-name>节点的文本节点,则XPath 应该是这样的:

/web-app/servlet/servlet-name[.='myServlet']/text()
于 2014-10-09T04:45:20.247 回答