有这样的要求:
如果尚未在web.xml中插入以下servlet:
<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>
我在我的蚂蚁脚本中使用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语法不正确。请帮忙。
答案 0 :(得分:0)
你试过的Xpath:
/web-app/servlet[servlet-name='myServlet']/text()
...返回 <servlet>
的直接子项的文本节点,这些节点在发布的XML示例中不存在。如果您打算返回 <servlet-name>
的直接子项的文本节点,那么XPath应该是这样的:
/web-app/servlet/servlet-name[.='myServlet']/text()