2013-03-05 58 views
4

只有在節點不存在的情況下,我纔有一個任務來將XML節點插入到現有的XML文件中。我管理的插入就好了,但是如果我運行這個多次我無法找到失蹤若非功能Ant XMLTASK插入一個節點(如果它不存在)

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

,我當然會在XML文件中的多個我的連接。我想進行檢查,以便只在所需的連接不在文件中時才插入。

在此先感謝。

回答

1

我設法解決我的問題。這或多或少是一種解決方法。解決方法是刪除然後插入方法

<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> 
6

我相信這種方法也適用。

<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>節點,而不是其子節點的文本)。 (當被問是否所有不知道存在的問題)

0

使用Ant條件:

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