Загрузка настроек из файла XML в класс Java - PullRequest
5 голосов
/ 31 марта 2011

У меня есть XML-файл, содержащий набор настроек симуляции (частичный пример ниже). Я хотел бы загрузить эти настройки в класс Java, чтобы настройки были доступны позже, без необходимости писать громоздкий жаргон DOM / XPath (и импортировать связанные пакеты) каждый раз, когда я (или другой программист, не владеющий DOM /) 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 ]

6 голосов
/ 31 марта 2011

Вы можете использовать JAXB для этой цели, он предназначен для привязки XML к классам Java.Есть полезное руководство по http://jaxb.java.net/guide/ и учебник по http://jaxb.java.net/tutorial/

4 голосов
/ 08 декабря 2012

Если у вас есть гибкость в расположении файла 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/

1 голос
/ 04 августа 2017

На мой взгляд, лучший и самый простой способ - использовать 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();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...