Frage

Gibt es einen Ant-API zum Lesen und ant build.xml und Abrufen von Elementen aus oder? Insbesondere möchte ich in der Lage sein, die Werte in einem Pfad Element abzurufen und in der Lage sein, alle Elemente auf dem Weg zu gehen.

ist mein Ziel um einen bestimmten Pfad zu holen und sicherzustellen, dass sie korrekt in einem offensichtlichen Bezug genommen wird, so dass der Aufbau und das Manifest Spiel, wenn das Produkt auf der Produktion geht.

EDIT: die Antworten Bezug auf (und danken Ihnen für sie) eine XML-API zu verwenden, ist das Problem, dass die Build-Datei, wie sie derzeit als das ist komplexer aufgebaut. Nämlich der Classpath verweist auf eine andere Classpath und schließt sie und die Elemente in dem Classpath verwiesen werden selbst definiert in einer Eigenschaftendatei, so dass es zu viel von dem Ant-API maßt neu.

War es hilfreich?

Lösung

Sie können die ProjectHelper-Klasse verwenden, Ihr Projekt mit einem Buildfile zu konfigurieren. Wenn der Pfad, den Sie überprüfen wollen, in einem Referenz enthalten sind, dann können Sie nur die Referenz erhalten aus dem Projekt durch seine ID.

Zum Beispiel, wenn Sie so etwas wie diese haben in Ihrem build.xml:

<path id="classpath">
    <fileset dir="${basedir}/lib" includes="*.jar"/>
</path>

Dann können Sie die Path Referenz mit dem folgenden Code erhalten:

import java.io.File;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.types.Path;

public class Test {
    public static void main(String[] args) throws Exception {    
        Project project = new Project();
        File buildFile = new File("build.xml");
        project.init();
        ProjectHelper.configureProject(project, buildFile);

        Path path = (Path) project.getReference("classpath");
     }
}

Beachten Sie, dass ProjectHelper.configureProject in ant 1.6.2 veraltet, aber nicht in 1.7.

Andere Tipps

Einige Zeit, die wir brauchen XML-Datei in Ant-Skript zu analysieren, um die Java-Datei ausführen oder eine Eigenschaft Wert und mehr wie diese lesen. Es ist sehr einfach, können wir dies mit dem Tag genannt <xmlproperty> tun. Dieser Tag lädt die XML-Datei und es alle Werte von XML-Datei in ant Eigenschaftswert umwandeln intern und wir können diesen Wert als ant-Eigenschaft verwenden. Zum Beispiel

<root>
    <properties>
      <foo>bar</foo>
    </properties>
</root>

entspricht in etwa diese in Ant-Skript-Datei als: <property name="root.properties.foo" value="bar"/> und Sie können diesen Wert mit $ drucken {root.properties.foo}.

vollständige Beispiel: 1. Erstellen Sie eine XML-Datei sagen Info.xml 2. Erstellen Sie ein Ant-Skript sagen Check.xml

Info.xml

<?xml version="1.0" encoding="UTF-8"?>
<Students>

  <Student>
    <name>Binod Kumar Suman</name>
        <roll>110</roll>
    <city> Bangalore </city>
  </Student>


</Students>

Check.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="Check" default="init">
 <xmlproperty file="Info.xml" collapseAttributes="true"/>

<target name = "init">
  <echo> Student Name :: ${Students.Student.name} </echo>
  <echo> Roll :: ${Students.Student.roll} </echo>
  <echo> City :: ${Students.Student.city} </echo>
</target>

</project>

Jetzt, nach diesem (Check.xml) Ant-Skript ausführen, werden Sie Ausgabe erhalten

Buildfile: C: \ XML_ANT_Workspace \ XML_ANT \ src \ Check.xml drin:      [Echo] Studenten Name :: Binod Kumar Suman      [Echo] Rollen :: 110      [Echo] Stadt :: Bangalore BUILD ERFOLGREICH Gesamtzeit: 125 Millisekunden

Es war sehr einfach bis hier, aber wenn Sie mehrere Datensätze in XML (StudentsInfo.xml) haben, dann wird es alle Datensätze zeigen mit Komma wie folgt getrennt

Buildfile: C: \ XML_ANT_Workspace \ XML_ANT \ src \ Check.xml drin:      [Echo] Schülername :: Binod Kumar Suman, Pramod Modi, Manish Kumar      [Echo] Rollen :: 110120130      [Echo] Stadt :: Bangalore, Japan, Patna BUILD ERFOLGREICH Gesamtzeit: 109 Millisekunden

Link-

Das glaube ich nicht, dass es eine API zur Verfügung, aber wie Sie in einem bestimmten Elemente nur daran interessiert sind, können Sie nur ein Skript schreiben, das sich nur den Pfad Element zieht und prüft über. Ein SAX-Parser in Python sollte ziemlich einfach sein, dies zu tun mit.

from xml.sax import make_parser
from xml.sax.handler import ContentHandler 

def PathHandler(ContentHandler):
    def __init__(self):
        self._reading_path = False
        self._path = ""

    def start_element(self, name, attrs):
        if name == "path":
            self._reading_path = True

    def characters(self, ch):
        if self._reading_path:
            self._path += ch

    def end_element(self, name):
        if name == "path":
            self._reading_path = False
            #self._path is now populated with the contents of the path element

    @property
    def path(self):
        return self._path

handler = PathHandler()
parser = make_parser()
parser.setContentHandler(handler)
parser.parse("build.xml")

Dies würde alle Textknoten lesen, die zwischen zwei XML-Elemente sind. Es sollte ziemlich einfach sein anpassen andere einfache XML-Parsing Anforderungen zu erfüllen.

Wenn Sie nur ein spezielles Element abrufen möchten, verwenden Sie die Java XML-API.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top