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。我想进行检查,以便仅在所需的连接不在文件中时才插入。

提前致谢。

4

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

于 2013-08-08T22:10:27.247 回答
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>
于 2013-03-05T15:09:37.297 回答
0

使用 Ant 条件(不确定在提出问题时是否所有条件都存在):

<if>
    <not>
        <resourcecontains 
            resource="shared.xml" 
            substring="&gt;MY CONNECTION&lt;name&gt;" />
    </not>
<then>
    <xmltask 
...
    </xmltask>
</then>
于 2017-09-21T12:58:21.483 回答