将XML文件中的设置加载到Java类中

时间:2011-03-31 08:51:55

标签: java xml data-structures

我有一个包含一堆模拟设置的XML文件(下面的部分示例)。我想将这些设置加载到Java类中,以便以后可以使用这些设置,而不必每次我(或其他不熟悉DOM的程序员)编写繁琐的DOM / XPath术语(并导入相关的包) XPath)想要访问特定的设置。

现在我设置了许多代表XML树中每个信息级别的子类,并“手动”将信息解析为所有这些子类。结果是,例如,如果我想得到方向号3,我可以写:

settings.setup.directions[3]

我想这可行,但确实感觉很僵硬。

有更聪明的方法吗?我们应该坚持使用DOM并跳过此转换业务吗? (请不要!)

请注意,我不是在寻找有关如何加载XML文件的说明 - 我知道如何将其加载到DOM文档中并使用XPath进行解析。

<?xml version="1.0"?>
<Settings>
    <Identity>
        <JobNumber>1234567</JobNumber>
        <SimulationName>MyTest</SimulationName>
    </Identity>
    <PreProcessing >
        <Tolerance>0.01</Tolerance>
    </PreProcessing >
    <PreprocessedInputData>
        <PreChewedThing></PreChewedThing>
        <OtherThing></OtherThing>
    </PreprocessedInputData>
    <Setup>
        <DomainExtent>
            <XMin>260</XMin>
            <XMax>290</XMax>
            <YMin>523</YMin>
            <YMax>565</YMax>
        </DomainExtent>
        <Directions>
            <Direction Index = "1">0</Direction>
            <Direction Index = "2">10</Direction>
            <Direction Index = "3">20</Direction>
            <Direction Index = "4">30</Direction>
        </Directions>
    </Setup>
</Settings>

3 个答案:

答案 0 :(得分:6)

您可以将JAXB用于此目的,它旨在将XML绑定到Java类。 有关http://jaxb.java.net/guide/的有用指南和http://jaxb.java.net/tutorial/

的教程

答案 1 :(得分:3)

如果您对XML文件的布局具有灵活性,并且不特别需要使用JAXB的设置类,请尝试使用Commons Configuration:

创建XML设置文件非常简单:

    XMLConfiguration configCreate = new XMLConfiguration();
    configCreate.setFileName("settings.xml");
    configCreate.addProperty("somesetting", "somevalue");
    configCreate.save();

从XML设置文件中读取:

    XMLConfiguration configRead = new XMLConfiguration("settings.xml");
    String settingValue = configRead.getString("somesetting");

请参阅http://commons.apache.org/configuration/

答案 2 :(得分:1)

在我看来,最好和最简单的方法是使用Java和XPath。这是一个例子:

<settings>
 <type>jdbc-mysql</tipus>
 <usr>usr</usr>
 <pass>pass</pass>
 <url>jdbc:mysql://192.168.1.123:3306/notifications_db</url>
 <schema>notificacions_db</schema>
 <date_format>yyyy-MM-dd HH:mm:ss</date_format>
 <prefix_package>false</prefix_package>
 <use_ssl>false</use_ssl>
 <auto_reconnect>true</auto_reconnect></settings>

Java主类示例:

public static void main(String[] args) {

    XPath xpath = XPathFactory.newInstance().newXPath();
    String xpathExpression = "/settings";
    InputSource inputSource = new InputSource("basedao-settings.xml");

    try {

        NodeList lstRoot = (NodeList) xpath.compile(xpathExpression).evaluate(inputSource, XPathConstants.NODESET);
        NodeList lstChilds = lstRoot.item(0).getChildNodes();

        for (int i = 0; i < lstChilds.getLength(); i++) {

            System.out.println(lstChilds.item(i).getLocalName());
            System.out.println(lstChilds.item(i).getTextContent());

        }

    } catch (XPathExpressionException e) {
        e.printStackTrace();
    }

}