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 引数の最後に指定する必要があります<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 に答える