2010-06-17 6 views
5

Ich bin ziemlich neu in ant und habe mir die Aufgaben angeschaut. Ich versuche eine XML-Datei zu erstellen. Muss ich einen externen Prozess aufrufen oder hat eine Möglichkeit, dies zu tun? Es könnte so einfach sein, wie eine Zeichenfolge an eine TXT-Datei zu senden und sie als .xml zu speichern. Ist es möglich?Können Sie mit Ant XML-Dateien erstellen/ändern?

+1

Ist die Aufgabe ['Replace'] (http://ant.apache.org/manual/Tasks/replace.html) nicht ausreichend für das, was Sie tun möchten? – tonio

+0

Danke, diese Antworten sind alle sehr nützlich. – sarcasteak

Antwort

5

Die richtige Antwort hängt davon ab, was Sie versuchen, tatsächlich zu tun.

Sie könnten ein kleines XML-Dokument mit echo Task-und Argument-Ersatz erstellen, aber das wird schwierig, sehr schnell zu pflegen.

Wenn Ihr Ziel ist, ein XML-Dokument zu generieren, das hauptsächlich aus mehreren Werten besteht, sollten Sie ein Vorlagedokument erstellen und dann die Aufgabe Copy with filtering verwenden.

Wenn Sie die Struktur des Dokuments abhängig von Daten von Ant (oder von woanders gesammelt) ändern müssen, dann wird die Aufgabe xslt besser passen. Das Problem mit XSLT ist, dass es nicht immer einfach zu verwenden ist (XSLT verwendet funktionale Programmierung, nicht prozedurale Programmierung).

Sie können feststellen, dass die richtige Antwort write your own Ant task ist, die genau das tun wird, was Sie wollen, genau wie Sie es wollen.

Wenn Sie besser beschreiben können, was Sie erreichen möchten, bin ich sicher, dass jemand eine genauere Antwort geben wird.

+0

Danke, ich ging mit dem Kopieren mit Filtern, funktioniert sehr gut! – sarcasteak

+0

Nur eine "Edge-Case" -Frage - behandelt die 'Copy-with-filter'-Task korrekt Werte, die spezielle XML-Zeichen enthalten (<, & etc?)?) – monojohnny

+0

Kopieren mit Filter ist dumm - alles was es tut, ist Bytes kopieren, mit Wert Substitution. Der Trick besteht darin, dass Sie die Werte in einer XML-Build-Datei definieren. Wenn Sie die Werte an erster Stelle richtig definieren können, ersetzt copy-with-filter sie in Ordnung. –

1

Du könntest das tun, obwohl es mir eher wie etwas ist, was du vorher schreiben willst, oder etwas, das du von Ant ausrufen könntest.

würde die Aufgabe sein:

<echo file="my.xml"><!--put escaped xml here--></echo> 

Das ist natürlich mühsam zu gehen, da alles entgangen sein muss, aber man kann es tun.

4

Mit der Task Replace können Sie eine bestimmte Zeichenfolge in einer Vorlage ersetzen und als XML speichern. Ein einfaches Beispiel, wie in der ant Dokumentation gesehen:

<replace file="${src}/index.html" token="@@@" value="wombat"/> 

ich es verwendet, um ein konstantes @[email protected] von dem aktuellen Build-ID in einem Java-Projekt zu ersetzen, zum Beispiel. Wenn Sie eine komplexere Verarbeitung durchführen möchten, sollten Sie sich die Aufgabe XSLT ansehen. Foe Beispiel Dokumentation zu erzeugen, mit den date in der Ausgabe ersetzen, können Sie so etwas wie verwenden:

<xslt basedir="doc" destdir="build/doc" 
     extension=".html" style="style/apache.xsl"> 
    <param name="date" expression="07-01-2000"/> 
</xslt> 
10

Wenn Sie mit einer beliebigen XML-Verarbeitung in Ihrem Ant-Workflow arbeiten müssen, wird dringend empfohlen, die xmltask zu verwenden. Sehr detaillierte Dokumentation und gute Unterstützung. Alles, was Sie dazu brauchen, sind einige XPATH knowledge. Hier =>another helpful article