Ant XMLTASK如果已经存在,则插入一个节点

时间:2013-03-05 14:52:04

标签: xml ant xmltask

我有一项任务是将XML节点插入现有的XML文件中,但前提是该节点尚不存在。我管理插入很好,但是我找不到缺少if-not功能

<xmltask source="shared.xml" dest="shared.xml" outputter="simple:3">
   <insert path="/sharedobjects[last()]">
      <![CDATA[
      <connection>   
         <name>MY CONNECTION</name>
      </connection>
      ]]>
   </insert>
</xmltask>

如果我多次运行,我当然会在xml文件中有多个MY CONNECTION。我想进行检查,以便仅在所需的连接尚未存在于文件中时插入。

提前致谢。

3 个答案:

答案 0 :(得分:7)

我相信这种方法也适用。

<xmltask source="shared.xml" dest="shared.xml" outputter="simple:3">

   <copy path="/sharedobjects/connection[name/text()='MY CONNECTION']/name/text()"
         property="XML_EXISTS_ALREADY" />

   <insert path="/sharedobjects[last()]" unless="XML_EXISTS_ALREADY">
      <![CDATA[
      <connection>   
         <name>MY CONNECTION</name>
      </connection>
      ]]>
   </insert>
</xmltask>

注意:xmltask的复制任务仅允许您在属性中存储属性或文本节点。因此,有必要在/name/text()的路径参数的末尾指定<copy>(即使我们真正关心的是整个<connection>节点,而不是它的子节点文本)。 / p>

答案 1 :(得分:2)

我设法解决了我的问题。这或多或少是一种解决方法。解决方案是删除然后插入方法

<xmltask source="shared.xml" dest="shared.xml" outputter="simple:3">
   <remove path="/sharedobjects/connection[name/text()='MY CONNECTION']"/>
   <insert path="/sharedobjects[last()]">
      <![CDATA[
      <connection>   
         <name>MY CONNECTION</name>
      </connection>
      ]]>
   </insert>
</xmltask>

答案 2 :(得分:0)

使用Ant条件(不确定在询问问题时是否全部存在):

<if>
    <not>
        <resourcecontains 
            resource="shared.xml" 
            substring="&gt;MY CONNECTION&lt;name&gt;" />
    </not>
<then>
    <xmltask 
...
    </xmltask>
</then>