2014-10-09 1 views
0

Есть такое требование:Merge XML-файл в скрипте

Вставьте следующий servelet в 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> 

Я использую 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> 

Мой вопрос заключается в том, как обнаружить, что сервлет есть или нет, потому что я должен избегать вставки дважды. Звучит, моя грамматика xpath неверна. Пожалуйста помоги.

+0

попробовать эту /web-app/servlet[count(./servlet-class) > 1], и это тоже нуждается в некоторых улучшениях – Raghavendra

+0

что это значит? – Tom

ответ

0

Xpath Вы пробовали:

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

... вернуться текстовые узлы, является прямым потомком <servlet>, который не существует в образце XML публикуемую. Если вы имели в виду, чтобы вернуть текстовые узлы, то есть прямым потомком <servlet-name> вместо этого, XPath должен был что-то вроде этого:

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