2010-02-25 6 views
8

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

<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

+1

Так как это пары с именем, почему бы просто не определить это как файл .properties? Таким образом, вам не нужно разбирать его вообще. – Adamski

+1

Возможный дубликат [Что является лучшим/самым простым способом чтения в XML-файле в приложении Java?] (Http://stackoverflow.com/questions/428073/what-is-the-best-simplest-way-to- read-in-an-xml-file-in-java-application) – ripper234

ответ

8

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

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

+0

Я пробовал коммонтификацию и получил одну ошибку компилятора, как показано выше в снимке ... Снимок может быть слишком неясным из-за уменьшения размера, чтобы вы могли получить доступ моментальный снимок на странице http://i45.tinypic.com/2eamoeg.jpg ............. ИЛИ ..... просто перетащите n, снимите рис. в адресную строку браузера (если вы используя firefox) –

+0

Yatendra Goel вам также нужно скачать apache commons-lang. И некоторые другие общие вещи - см. Здесь http://commons.apache.org/configuration/dependencies.html – Bozho

+0

Я написал следующий оператор, но он не работает ..... HOST = config.getString ("db-host "); ...................... Есть ли какая-либо ошибка в этом заявлении ... –

2

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

5

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

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

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

Эти классы, похоже, находятся в jdk. Нет внешних зависимостей. –

9

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

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

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

2

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

0

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

4

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

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

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

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

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

+0

Вы отвечаете на дубликат. Пожалуйста, подумайте о том, как отвечать на исходный поток. – yacc

+0

@yacc спасибо за ваш комментарий. Однако я просмотрел сообщенный [потенциальный дубликат] (https://stackoverflow.com/questions/428073/what-is-the-best-simplest-way-to-read-in-an-xml-file-in-java -приложение), и это было нецелесообразно в том, как было сказано («лучшее/простейшее» решение). Если есть еще одна почта, которую я пропустил, сообщите мне ссылку, чтобы я мог проверить. Однако в этом вопросе был предоставлен XML-пример, и в опросе четко сказано, что он хочет решение, для которого требуется очень мало строк кода. Вот почему я ответил на это. –

Смежные вопросы