我有一项任务是将XML节点插入到现有的XML文件中,但前提是该节点尚不存在.我管理插入就好了,但是我发现缺少if-not功能
Run Code Online (Sandbox Code Playgroud)<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.我想进行检查,以便仅在文件中尚未存在所需连接时才插入.
提前致谢.
我相信这种方法也有效.
<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>
Run Code Online (Sandbox Code Playgroud)
注意:xmltask的复制任务仅允许您在属性中存储属性或文本节点.因此,有必要/name/text()在路径参数的末尾指定<copy>(即使我们真正关心的是整个<connection>节点,而不是它的子节点文本).
我设法解决了我的问题。这或多或少是一种解决方法。解决方案是删除然后插入方法
<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>
Run Code Online (Sandbox Code Playgroud)