4 Stimmen

Parsing von Ant- und XML-Konfigurationsdateien

Ich habe eine XML-Datei der folgenden Form -

<map MAP_XML_VERSION="1.0">
    <entry key="database.user" value="user1"/>
    ...
</map>

Hat Ameise eine native Fähigkeit, dies zu lesen und lassen Sie mich eine xquery ausführen, um Werte für Schlüssel zurückziehen? Going durch die API habe ich nicht sehen, solche Fähigkeiten.

9voto

Brian Agnew Punkte 260470

Die optionale Ant-Aufgabe XMLTask ist für diese Aufgabe konzipiert. Geben Sie einen XPath-Ausdruck ein, und Sie können die oben genannten Elemente (z. B.) in einer Eigenschaft auswählen. Hier ist ein Artikel wie sie zu verwenden ist, mit Beispielen. Es wird Tonnen von anderen XML-bezogenen Manipulationen/Abfragen/Erstellung als auch tun.

z.B..

<xmltask source="map.xml">
   <!-- copies to a property 'user' -->
   <copy path="/map/entry[@key='database.user']/@value" attrValue="true" property="user"/>
</xmltask>

Haftungsausschluss: Ich bin der Autor.

8voto

Kevin Punkte 29597

Sie können die scriptdef Tag, um einen JavaScript-Wrapper für Ihre Klasse zu erstellen. Innerhalb von JS haben Sie so ziemlich alle Möglichkeiten von Java und können jede Art von kompliziertem XML-Parsing durchführen, die Sie wollen.

Zum Beispiel:

<project default="build">        
    <target name="build">            
        <xpath-query query="//entry[@key='database.user']/@value"
                     xmlFile="test.xml" addproperty="value"/>
        <echo message="Value is ${value}"/>    
    </target>

    <scriptdef name="xpath-query" language="javascript">
        <attribute name="query"/>
        <attribute name="xmlfile"/>
        <attribute name="addproperty"/>

        <![CDATA[
            importClass(java.io.FileInputStream);
            importClass(javax.xml.xpath.XPath);
            importClass(javax.xml.xpath.XPathConstants);
            importClass(javax.xml.xpath.XPathFactory);
            importClass(org.xml.sax.InputSource);

            var exp = attributes.get("query");
            var filename = attributes.get("xmlfile");
            var input = new InputSource(new FileInputStream(filename));
            var xpath = XPathFactory.newInstance().newXPath();
            var value = xpath.evaluate(exp, input, XPathConstants.STRING);

            self.project.setProperty( attributes.get("addproperty"), value );

        ]]>

    </scriptdef>
</project>

0voto

Yishai Punkte 87548

Klingt, als ob Sie etwas wollen wie ant-xpath-Aufgabe . Mir ist nicht bekannt, dass es in Ant eine integrierte Möglichkeit gibt, dies zu tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X