在ant脚本中合并xml文件
有这样的要求: 如果web.xml中尚未插入以下Servlet:在ant脚本中合并xml文件,xml,xpath,ant,xmltask,Xml,Xpath,Ant,Xmltask,有这样的要求: 如果web.xml中尚未插入以下Servlet: <servlet> <description>My Servlet</description> <servlet-name>myServlet</servlet-name> <servlet-class>com.tom.servlet.MyServlet</servlet-class> <load-on-start
<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 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语法不正确。请帮助。您尝试的Xpath:
/web-app/servlet[servlet-name='myServlet']/text()
…返回的文本节点是的直接子节点,该节点在发布的XML示例中不存在。如果要返回的文本节点是的直接子节点,则XPath应该如下所示:
/web-app/servlet/servlet-name[.='myServlet']/text()
试试这个/web app/servlet[count./servlet class>1],这需要一些改进,这是什么意思?