Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ant脚本中合并xml文件_Xml_Xpath_Ant_Xmltask - Fatal编程技术网

在ant脚本中合并xml文件

在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

有这样的要求:

如果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>
我在我的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],这需要一些改进,这是什么意思?