Как читать XML-файл с Java? - PullRequest
       219

Как читать XML-файл с Java?

8 голосов
/ 25 февраля 2010

Мне не нужно читать сложные XML-файлы. Я просто хочу прочитать следующий файл конфигурации с простейшей программой чтения XML

<config>
    <db-host>localhost</db-host>
    <db-port>3306</db-port>
    <db-username>root</db-username>
    <db-password>root</db-password>
    <db-name>cash</db-name>
</config>

Как прочитать вышеупомянутый файл XML с помощью программы чтения XML через Java?

Ответы [ 9 ]

9 голосов
/ 25 февраля 2010

Мне нравится jdom:

SAXBuilder parser = new SAXBuilder();
Document docConfig = parser.build("config.xml");
Element elConfig = docConfig.getRootElement();
String host = elConfig.getChildText("host");
8 голосов
/ 25 февраля 2010

Поскольку вы хотите проанализировать файлы конфигурации, я думаю, что commons-configuration будет лучшим решением.

Commons Configuration предоставляет общий интерфейс конфигурации, который позволяет приложению Java считывать данные конфигурации из различных источников (включая XML)

5 голосов
/ 25 февраля 2010

Вы можете использовать простой синтаксический анализатор DOM для чтения XML-представления.

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse("config.xml");
4 голосов
/ 12 декабря 2012

Если вам просто нужно простое решение, включенное в Java SDK (начиная с 5.0), ознакомьтесь с пакетом XPath. Я уверен, что другие выступают лучше, но это было все, что мне было нужно. Вот пример:

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.xml.sax.InputSource;

...

try {
    XPath xpath = XPathFactory.newInstance().newXPath();
    InputSource inputSource = new InputSource("strings.xml");

    // result will equal "Save My Changes" (see XML below)
    String result = xpath.evaluate("//string", inputSource);
}
catch(XPathExpressionException e) {
    // do something
}

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="saveLabel">Save My Changes</string>
</resources>
2 голосов
/ 25 февраля 2010

Я бы порекомендовал Commons Digester, что позволяет анализировать файл без написания пакетов кода. Он использует ряд правил, чтобы определить, какое действие следует выполнять при обнаружении данного элемента или атрибута (типичное правило может заключаться в создании определенного бизнес-объекта).

2 голосов
/ 25 февраля 2010

Существует несколько синтаксических анализаторов XML для Java. Один из них, который я использовал и который особенно удобен для разработчиков, - JDOM . И под «дружественным к разработчику» я имею в виду «ориентированный на Java» (т. Е. Вы работаете с объектами в своей программе), а не «ориентированный на документ», как некоторые другие инструменты.

0 голосов
/ 07 сентября 2017

Хотя я еще не пробовал XPath, поскольку он только что привлек мое внимание, я пробовал несколько решений и не нашел ничего, что подходит для этого сценария.

Я решил создать библиотеку, которая удовлетворяет этой потребности, пока вы работаете в соответствии с предположениями, указанными в файле readme. Преимущество этого метода в том, что он использует SAX для анализа всего файла и его возврата пользователю в виде карты, чтобы вы могли искать значения как ключ -> значение.

https://github.com/daaso-consultancy/ConciseXMLParser

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

0 голосов
/ 25 февраля 2010

Если вы хотите иметь возможность читать и записывать объекты в XML напрямую, вы можете использовать XStream

0 голосов
/ 25 февраля 2010

Для аналогичного варианта использования в моем приложении я использовал JaxB. С Jaxb чтение XML-файлов похоже на взаимодействие с Java POJO. Но чтобы использовать JAXB, вам нужен xsd для этого xml-файла. Вы можете посмотреть более подробную информацию здесь

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