2013-03-05 1 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

(모든 경우에 확실하지 않은 존재라는 질문은 질문 할 때) :

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