2010-02-25 27 views
8

No necesito leer archivos XML complejos. Sólo quiero leer el siguiente archivo de configuración con un lector de XML simple¿Cómo leer un archivo XML con 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> 

Cómo leer el archivo XML anterior con un lector de XML a través de Java?

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

+1

Como estos son pares de valores nominales, ¿por qué no simplemente definir esto como un archivo .properties? De esa forma no es necesario analizarlo en absoluto. – Adamski

+1

posible duplicado de [¿Cuál es la mejor/más simple forma de leer en un archivo XML en la aplicación Java?] (Http://stackoverflow.com/questions/428073/what-is-the-best-simplest-way-to- read-in-an-xml-file-in-java-application) – ripper234

Respuesta

8

Puesto que usted desea analizar los archivos de configuración, creo commons-configuration sería la mejor solución.

Commons Configuración proporciona una interfaz de configuración genérico que permite a una aplicación Java para leer datos de configuración de una variedad de fuentes (incluyendo XML)

+0

Intenté la configuración común y obtuve un error de compilación como se muestra arriba en la instantánea ... La instantánea puede ser demasiado confusa debido a la reducción de tamaño para que pueda acceder la instantánea en http://i45.tinypic.com/2eamoeg.jpg ............. O ..... simplemente arrastre y suelte la foto en la barra de direcciones de su navegador (si está usando Firefox) –

+0

Yatendra Goel tienes que descargar apache commons-lang también. Y algunos otros comunes también - vea aquí http://commons.apache.org/configuration/dependencies.html – Bozho

+0

Escribí la siguiente declaración pero no está funcionando ..... HOST = config.getString ("db-host "); ...................... ¿Hay algún error en esta declaración ... –

2

Hay varios analizadores XML para Java. Uno que he usado y encontré particularmente amigable para desarrolladores es JDOM. Y por desarrollador amigable, quiero decir "orientado a Java" (es decir, trabajas con objetos en tu programa), en lugar de "orientado a documentos", como lo son algunas otras herramientas.

5

Puede usar un analizador DOM simple para leer la representación xml.

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

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

Estas clases parecen estar en jdk. Sin dependencias externas. –

9

me gusta jdom:

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

Para un caso de uso similar en mi solicitud Solía ​​jaxb. Con Jaxb, leer archivos XML es como interactuar con POJOs de Java. Pero para usar JAXB necesita tener el xsd para este archivo xml. Puede buscar más información here

2

Recomendaría Commons Digester, que le permite analizar un archivo sin escribir resmas de código. Utiliza una serie de reglas para determinar qué acción se debe realizar al encontrar un elemento o atributo dado (una regla típica podría ser crear un objeto comercial particular).

0

Si usted quiere ser capaz de leer y escribir objetos a XML directamente, puede utilizar XStream

4

Si sólo necesita una solución simple que se incluye con el SDK de Java (desde 5,0), revisar el paquete de XPath . Estoy seguro de que otros se desempeñan mejor, pero esto era todo lo que necesitaba. He aquí un ejemplo:

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

Aunque no he probado todavía XPath, ya que sólo ha llegado a mi atención ahora, he intentado algunas soluciones y no he encontrado cualquier cosa que funcione para este escenario

Decidí hacer una biblioteca que satisfaga esta necesidad siempre y cuando esté trabajando bajo los supuestos mencionados en el archivo léame. Tiene la ventaja de que usa SAX para analizar el archivo completo y devolverlo al usuario en forma de un mapa para que pueda buscar valores como clave -> valor.

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

Si falta algo amablemente me informan del artículo que falta, ya que sólo desarrollarlo en función de las necesidades de los demás ya mí mismo.

+0

Está respondiendo un duplicado. Considere responder el hilo de origen. – yacc

+0

@yacc gracias por su comentario. Sin embargo, miré el [duplicado potencial] informado (https://stackoverflow.com/questions/428073/what-is-the-best-simplest-way-to-read-in-an-xml-file-in-java -aplicación) y no fue objetivo en cómo se estableció (solución "mejor/más simple"). Si hay otra publicación que he perdido, proporcione el enlace para que pueda verificar. Sin embargo, en esta pregunta se proporcionó un ejemplo XML y el interrogador claramente menciona que quiere una solución que requiere muy pocas líneas de código. Es por eso que he respondido a esto. –