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

мне не нужно читать сложные 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?

http://i45.tinypic.com/2eamoeg.jpg

9 ответов


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

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


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

SAXBuilder parser = new SAXBuilder();
Document docConfig = parser.build("config.xml");
Element elConfig = docConfig.getRootElement();
String host = elConfig.getChildText("host");

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

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse("config.xml");

Если вам просто нужно простое решение, включенное в 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
}

строки.в XML

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="saveLabel">Save My Changes</string>
</resources>

существует несколько синтаксических анализаторов XML для Java. Один я использовал и особенно дружественный составляет помощи jdom. И под дружественным к разработчику я подразумеваю " Java oriented "(т. е. вы работаете с объектами в своей программе), а не" document oriented", как некоторые другие инструменты.


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


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


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


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

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

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

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