Ant XMLTASK插入一个节点(如果它不存在)
问题描述:
只有在节点不存在的情况下,我才有一个任务来将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文件中的多个我的连接。我想进行检查,以便只在所需的连接不在文件中时才插入。
在此先感谢。
答
我设法解决我的问题。这或多或少是一种解决方法。解决方法是删除然后插入方法
<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>
答
我相信这种方法也适用。
<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>
节点,而不是其子节点的文本)。 (当被问是否所有不知道存在的问题)
答
使用Ant条件:
<if>
<not>
<resourcecontains
resource="shared.xml"
substring=">MY CONNECTION<name>" />
</not>
<then>
<xmltask
...
</xmltask>
</then>