2011-12-30 2 views
2

Я просто пытаюсь скопировать один узел из существующего файла и вставить его в другой файл. Ничего особенного. У меня также есть некоторый код для вставки узла, чтобы увидеть, если я мог бы заставить его сделать это, но мне не удалось, а славно :) Любая помощь будет принята с благодарностьюAnt XMLTask не может вставить новый XML-узел в существующий файл XML

Base XML файла: (Input.xml)

<?xml version="1.0" encoding="UTF-8"?> 
<foo> 
    <bar> 
     <tests> 
      <test id="1"/> 
      <test id="2"/> 
     </tests> 
    </bar> 
</foo> 

муравей цели я бегу:

<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. Укажите, какой именно узел из первого документа должен быть вставлен во второй документ. Укажите, где именно во втором документе должен быть вставлен узел. –

+0

Также, как этот вопрос связан с XPath? Вставка узла в документ XML не может быть выполнена с помощью XPath, который является языком запросов (только) для XML-документов и, как таковой, не может создавать/изменять XML-документы. –

+0

XMLTask для муравьев использует нотацию Xpath. Если вы посмотрите на цель write-config, вы увидите, что создается файл с именем output.xml, в котором есть xml. Узел я пытаюсь вставить в <тест ID = "3" /> Я хотел бы ожидать выход выглядеть примерно так: <идентификатор теста = "3" /> gdoubleod

ответ

3

я понял, что проблема была. Проблема заключалась в том, что я устанавливал выходной файл в xmltask и атрибут файла в вставном узле. Атрибут файла в узле вставки - это когда вы хотите вставить весь XML-файл в атрибут назначения xmltask.

Не Испытано код, но что-то, как это должно работать сейчас:

<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 \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 "> (по умолчанию позиция в UNDER для выбранного узла) –

Смежные вопросы