我有一项任务是将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。我想进行检查,以便仅在所需的连接尚未存在于文件中时插入。
提前致谢。
答案 0 :(得分: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()
的路径参数的末尾指定<copy>
(即使我们真正关心的是整个<connection>
节点,而不是它的子节点文本)。 / p>
答案 1 :(得分: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>
答案 2 :(得分:0)
使用Ant条件(不确定在询问问题时是否全部存在):
<if>
<not>
<resourcecontains
resource="shared.xml"
substring=">MY CONNECTION<name>" />
</not>
<then>
<xmltask
...
</xmltask>
</then>