2009-10-22 7 views
0

Java를 사용하여 XML 데이터를 읽어야합니다.Java를 사용하여 XML 속성 값을 읽는 방법

이것은 내 XML 파일입니다. 자바를 사용하여 XML 파일에서

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 

     <!-- Database connection settings --> 
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 

     <property name="connection.url">jdbc:mysql://192.168.1.55/tisas</property> 
     <property name="connection.username">root</property> 
     <property name="connection.password">xxyy</property> 
     <property name="show_sql">false</property> 

나는 값을 얻기 위해 (//192.168.1.55/tisas : MySQL의 JDBC)가 필요합니다. 어떻게받을 수 있습니까?

+0

이것은 최대 절전 모드 설정 파일처럼 보인다. 그래서 아마도이 XML로부터 값을 얻기위한 표준적인 방법 (API?)이있을 것입니다. 즉, XML을 직접 파싱하지 않아도됩니다. – Rahul

답변

0

사용 dom4j와 그 문서는 당신이 이것을 달성하는 데에는 많은 방법이있다

3

할 의도 무엇을 달성하는 방법에 대한 매우 많은 예제가 있습니다. 나는 장기 실행 응용 프로그램에 대해 이것을 한 번 읽었다 고 가정하므로 성능이 문제가되어서는 안됩니다. 따라서 Java XPath API (Tutorial)로 이동합니다.

import java.io.StringReader; 
import javax.xml.xpath.XPathFactory; 
import org.xml.sax.InputSource; 

public class XPath { 
    public static void main(String[] args) throws Exception { 
    String xml = "<hibernate-configuration><session-factory><property name=\"hibernate.connection.provider_class\">org.hibernate.connection.C3P0ConnectionProvider</property><property name=\"connection.driver_class\">com.mysql.jdbc.Driver</property><property name=\"connection.url\">jdbc:mysql://192.168.1.55/tisas</property></session-factory></hibernate-configuration>"; 
    String connectionUrl = XPathFactory.newInstance().newXPath().compile("//session-factory/property[@name='connection.url']/text()").evaluate(new InputSource(new StringReader(xml))); 
    System.out.println("connectionUrl = " + connectionUrl); 
    } 
} 
내가 DOM을 위해 갈 것

(같은 : - (A FileReader 예를 들어, 당신의 usecae에 적합한 상관 없음 ReaderStringReader를 대체 주) 다음

은 완전히 동작하는 예제 XPath를 사용하고 있습니다 Ram에 의해 제안 됨) 파일에서 하나의 값만 필요하면 더 많은 코드가 필요합니다.

+0

이것을 실행하면 예외가 발생합니다. [치명적인 오류] : 1 : 7 : "[xX] [mM] [1L]"과 일치하는 처리 명령 대상이 허용되지 않습니다. thread "main"의 예외 org.xml.sax.SAXParseException : "[xX] [mM] [1L]"과 일치하는 처리 명령 대상이 허용되지 않습니다. – Srinivasan

+0

내 코드를 실행 했습니까? 아니면 파일에서 읽기 위해 코드를 수정 했습니까? 나는이 코드를 직접 실행했고 작동한다 (나는 Sun의 JRE 1.6.0_16을 사용하고 있었다) – sfussenegger

+0

그런데, 나는 당신의 다른 질문을보고 있었다. 귀하의 모든 질문에 대해 정확한/최선의 답변을 수락하는 것을 고려해야합니다 - 그것은 stackoverflow 작동 방식이 될 것입니다. – sfussenegger

3

가정하면 최대 절전 모드 라이브러리를 사용할 수 있으며, 프로퍼티 파일은 config.xml 파일에 저장됩니다

new Configuration().addFile("config.xml").getProperty("connection.url") 
0

이 여기의 Xerces 라이브러리를 사용하는 예이다 :

String xpath = "/hibernate-configuration/session-factory/property[@name='connection.url']/text()"; 

// Create the builder and parse the file 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setValidating(false); 


Document doc = factory.newDocumentBuilder().parse(new File("src/xml/input.xml")); 

// Get the matching elements 
String url = org.apache.xpath.XPathAPI.selectNodeList(doc, xpath).item(0).getNodeValue(); 
System.out.println(url); 
관련 문제