2011-12-30 7 views
2

既存のファイルから1つのノードをコピーして別のファイルに貼り付けようとしています。何もない。私はそれはそれを行うために得ることができるかどうかを確認するためにノードを挿入するいくつかのコードをも持っていますが、私はむしろ見事に失敗した:)すべてのヘルプは大Ant XMLTaskは既存のXMLファイルに新しいxmlノードを挿入できません

ベースのXMLファイルいただければ幸いです。(input.xmlに)

<?xml version="1.0" encoding="UTF-8"?> 
<foo> 
    <bar> 
     <tests> 
      <test id="1"/> 
      <test id="2"/> 
     </tests> 
    </bar> 
</foo> 
を私が実行している

Antターゲット:

<target name="copy"> 
    <xmltask source="input.xml" dest="1.xml"> 
     <copy path="/foo/bar/tests/test[@id='1']" buffer="storedXml" /> 
    </xmltask> 
</target> 

<target name="paste-xml" depends="define-tasks,copy"> 
    <xmltask source="input.xml" dest="output.xml"> 
     <insert path="/foo/bar/tests/test[last()]" file="output.xml" buffer="storedXml"/> 
    </xmltask> 
</target> 

<target name="insert-xml" depends="define-tasks"> 
    <xmltask source="input.xml" dest="output.xml"> 
     <insert path="/foo/bar/tests/test[last()]" file="output.xml"> 
      <![CDATA[ 
      <test id="3"/> 
      ]]> 
     </insert> 
    </xmltask> 
</target> 

<target name="write-config" depends="define-tasks"> 
    <delete file="output.xml" failonerror="false"/> 
    <echoxml file="output.xml"> 
     <foo> 
      <bar> 
       <tests/> 
      </bar> 
     </foo> 
    </echoxml> 
</target> 
+0

どんな質問があるように思えません...してください、seconf XMLドキュメントを提供し、あなたは「挿入する必要がそこに? "ノードを最初のXML文書から削除します。最初の文書のどのノードを2番目の文書に挿入する必要があるかを指定してください。 2番目の文書のどこにノードを挿入するかを正確に指定してください。 –

+0

また、この質問はXPathと何が関係していますか? XMLドキュメントにノードを挿入することは、XMLドキュメントのクエリ言語(唯一)であるXPathでは実行できません。そのため、XMLドキュメントを作成/変更できません。 –

+0

antのXMLTaskは、Xpath記法を使用します。 write-configターゲットを見ると、そこにxmlが入っているoutput.xmlという名前のファイルが作成されていることがわかります。 <テストID = "3" /> gdoubleod

答えて

3

私は、問題が何であったかを考え出しました。問題は、xmltaskに出力ファイルを設定し、挿入ノードにファイル属性を設定していたことです。挿入ノード内のファイル属性は、xmltaskの宛先属性にxmlファイル全体を挿入する場合です。

コードをテストされたが、このような何かが動作するはずはない:

<target name="paste-xml" depends="define-tasks,copy"> 
    <xmltask source="input.xml" dest="output.xml"> 
     <insert path="/foo/bar/tests/test[last()]" buffer="storedXml"/> 
    </xmltask> 
</target> 

<target name="insert-xml" depends="define-tasks"> 
    <xmltask source="input.xml" dest="output.xml"> 
     <insert path="/foo/bar/tests/test[last()]"> 
      <![CDATA[ 
      <test id="3"/> 
      ]]> 
     </insert> 
    </xmltask> 
</target> 
+0

これを試しましたが、output.xmlが間違っているようです \t \t <?xml version = "1.0" encoding = "UTF-8" standalone = "no"?> \t \t \t \t \t \t \t \t \t \t \t \t \t \t <テストID = "1" /> \t \t \t \t \t \t \t \t \t \t \t <テストID = "3" /> \t \t \t \t \t \t \t \t \t \t \t \t \t \t

+0

適切な構文が最も可能性が高いです。<パス= "/ fooの/バーを挿入/ tests/test [last()] "position =" after ">(デフォルトでは、選択したノードの下の位置) –