Что лучший/самый простой путь состоит в том, чтобы считать в XML-файле в JAVA-приложении? [закрытый]

Я видел, как это реализовано и через отражение. В основном существует метод, который будет проходить через элементы объекта и соответствующим образом копировать их в новый объект. Когда он достиг ссылочных типов или коллекций, я думаю, что он сделал рекурсивный вызов сам по себе. Отражение стоит дорого, но оно работает очень хорошо.

52
задан Jonik 11 June 2009 в 10:28
поделиться

10 ответов

Существует, конечно, много хороших решений на основе того, в чем Вы нуждаетесь. Если это - просто конфигурация, необходимо взглянуть на Джакарту конфигурация свободного городского населения и систематизатор свободного городского населения .

Вы могли всегда использовать стандартный метод JDK получения документа:

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;

[...]

File file = new File("some/path");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(file);
53
ответ дан Guillaume 7 November 2019 в 09:14
поделиться

Существует ли конкретная причина, Вы выбрали файлы конфигурации XML? Я сделал конфигурации XML в прошлом, и они часто оказывались большим количеством головной боли, чем что-либо еще.

я предполагаю, что реальный вопрос состоит в том, могли ли с помощью чего-то как эти предпочтения API работать лучше в ситуации.

Причины использовать Предпочтительный API по самокрутке решение XML:

  • Избегает типичного уродства XML (DocumentFactory, и т.д.), наряду с уходом от сторонних библиотек для обеспечения бэкенда XML

  • Созданный в поддержке значений по умолчанию (никакая специальная обработка, требуемая для недостающих/поврежденных/недопустимых записей)

  • Никакая потребность санировать значения для устройства хранения данных XML (обертывание CDATA, и т.д.)

  • состояние Guaranteed запоминающего устройства (никакая потребность постоянно выписать XML к диску)

  • , Запоминающее устройство настраивается (файл на диске, LDAP, и т.д.)

  • Многопоточный доступ ко всем предпочтениям свободного

10
ответ дан James Van Huis 7 November 2019 в 09:14
поделиться

JAXB прост в использовании и включен в Java 6 SE. С JAXB или другими данными XML, связывающими такой как Простые, Вы не должны обрабатывать XML сами, большая часть работы сделана библиотекой. Основное использование должно добавить аннотацию к Вашему существующему POJO. Они аннотация тогда используются для генерации XML-схемы для Вас данные и также при чтении/записи данных из файла.

4
ответ дан Pierre Buyle 7 November 2019 в 09:14
поделиться

Изучите JAXB.

3
ответ дан cletus 7 November 2019 в 09:14
поделиться

Я только использовал jdom. Это довольно легко.

Идут сюда для документации и загружать его: http://www.jdom.org/

, Если у Вас есть очень очень большой документ тогда, лучше не считать все это в память, но использовать синтаксический анализатор SAX, который называет Ваши методы, поскольку это поражает определенные теги и атрибуты. Необходимо тогда создать конечный автомат для контакта с входящими вызовами.

2
ответ дан Sarel Botha 7 November 2019 в 09:14
поделиться

Самое простое безусловно будет Просто http://simple.sourceforge.net , только необходимо аннотировать отдельный объект как так

@Root
public class Entry {

   @Attribute
   private String a
   @Attribute
   private int b;
   @Element
   private Date c;

   public String getSomething() {
      return a;
   }
} 

@Root
public class Configuration {

   @ElementList(inline=true)
   private List<Entry> entries;

   public List<Entry> getEntries() { 
      return entries;
   }
}

Тогда все, что необходимо сделать для чтения, целый файл, определяют местоположение, и это проанализирует и заполнит аннотируемый POJO. Это сделает все преобразования типов и проверку. Можно также аннотировать для обратных вызовов стойкого организма при необходимости. Чтение его может быть сделано как так.

Serializer serializer = new Persister();
Configuration configuraiton = serializer.read(Configuration.class, fileLocation);
1
ответ дан ng. 7 November 2019 в 09:14
поделиться

В зависимости от Вашего приложения и объема cfg файла, файл свойств мог бы быть самым легким. Уверенный это не столь изящно как xml, но это, конечно, легче.

1
ответ дан tmeisenh 7 November 2019 в 09:14
поделиться

Используйте java.beans.XMLDecoder , часть базового Java SE с тех пор 1.4.

XMLDecoder input = new XMLDecoder(new FileInputStream("some/path.xml"));
MyConfig config = (MyConfig) input.readObject();
input.close();

Это легко к , пишут конфигурационные файлы рукой или используют соответствие XMLEncoder с некоторой установкой для записи новых объектов во времени выполнения.

1
ответ дан erickson 7 November 2019 в 09:14
поделиться

Какая самая лучшая / простая библиотека для использовать для чтения значений из этот файл?

Поскольку вы просите простейшую библиотеку, я чувствую себя обязанным добавить подход, совершенно отличный от того, что в ответе Гийома, получившем наибольшее количество голосов . (Из других ответов упоминание sjbotha JDOM ближе всего к тому, что я предлагаю).

Я пришел к выводу, что для обработки XML в Java использование стандартных инструментов JDK, безусловно, не самый простой способ, и это только при некоторых обстоятельствах (например, при невозможности использования сторонних библиотеки, почему-то) это лучший способ.

Вместо этого рассмотрите возможность использования хорошей библиотеки XML, такой как XOM . Вот как читать XML-файл в объект nu.xom.Document :

import nu.xom.Builder;
import nu.xom.Document;
import java.io.File;

[...]

File file = new File("some/path");
Document document = new Builder().build(file);

Это было немного проще, чем чтение файла в org.w3c.dom.Document тоже не было очень сложным, в "

8
ответ дан 7 November 2019 в 09:14
поделиться

Вот действительно простой API, который я создал для чтения простых файлов XML на Java. Это невероятно просто и удобно. Надеюсь, это будет полезно для вас.

http://argonrain.wordpress.com/2009/10/27/000/

-1
ответ дан 7 November 2019 в 09:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: