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

bio*_*ark 5 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>
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

pea*_*itt 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>
Run Code Online (Sandbox Code Playgroud)

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


bio*_*ark 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>
Run Code Online (Sandbox Code Playgroud)