Ant XMLTASK 如果节点不存在则插入节点

6

我有一个任务,需要将一个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个回答

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的复制任务仅允许您将属性或文本节点存储在属性中。因此,在<copy>的路径参数末尾必须指定/name/text()(即使我们真正关心的是整个<connection>节点的存在,而不是其子节点的文本)。


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>

0

使用Ant条件(不确定在提问时是否存在):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接