Ant和XML配置文件解析

时间:2009-08-10 17:45:40

标签: java xml ant

我有一个以下格式的XML文件 -

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

ant是否具有读取此功能的本机功能并让我执行xquery来回退键的值?通过API我没有看到这样的能力。

3 个答案:

答案 0 :(得分:10)

可选的Ant任务XMLTask旨在执行此操作。给它一个XPath表达式,你可以选择上面的(比如说)一个属性。关于如何使用它的Here's an article,以及示例。它还将进行大量其他与XML相关的操作/查询/创建。

e.g。

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

免责声明:我是作者。

答案 1 :(得分:8)

您可以使用scriptdef标记为您的班级创建JavaScript包装器。在JS中,你几乎拥有Java的全部功能,可以进行任何你想要的复杂XML解析。

例如:

<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>

答案 2 :(得分:0)

听起来像是想要ant-xpath-task之类的东西。我不知道使用Ant的内置方法。