2010-02-25 39 views
8

Tôi không cần phải đọc các tệp XML phức tạp. Tôi chỉ muốn đọc tệp cấu hình sau đây với trình đọc XML đơn giản nhấtLàm thế nào để đọc một tệp XML bằng 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ách đọc tệp XML ở trên với trình đọc XML thông qua Java?

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

+1

Vì đây là các cặp giá trị tên, tại sao không chỉ xác định đây là tệp .properties? Bằng cách đó bạn không cần phải phân tích nó cả. – Adamski

+1

có thể trùng lặp của [Cách tốt nhất/đơn giản nhất để đọc trong một tệp XML trong ứng dụng Java là gì?] (Http://stackoverflow.com/questions/428073/what-is-the-best-simplest-way-to- Read-in-an-xml-file-in-java-application) – ripper234

Trả lời

8

Vì bạn muốn phân tích tập tin cấu hình, tôi nghĩ commons-configuration sẽ là giải pháp tốt nhất.

Commons Cấu hình cung cấp một giao diện cấu hình chung cho phép một ứng dụng Java để đọc dữ liệu cấu hình từ nhiều nguồn khác nhau (bao gồm XML)

+0

Tôi đã thử commons-cofiguration và có một lỗi trình biên dịch như được hiển thị ở trên trong ảnh chụp ... Ảnh chụp có thể quá không rõ ràng do giảm kích thước để bạn có thể truy cập ảnh chụp tại http://i45.tinypic.com/2eamoeg.jpg ............. HOẶC ..... chỉ cần kéo n thả ảnh vào thanh địa chỉ trình duyệt của bạn (nếu bạn là sử dụng firefox) –

+0

Yatendra Goel bạn cũng phải tải apache commons-lang. Và một số commons khác nữa - xem tại đây http://commons.apache.org/configuration/dependencies.html – Bozho

+0

Tôi đã viết câu lệnh sau nhưng nó không hoạt động ..... HOST = config.getString ("db-host "); ...................... Có sai sót nào trong câu lệnh này không ... –

2

Có một số phân tích cú pháp XML cho Java. Tôi đã sử dụng và tìm thấy đặc biệt là nhà phát triển thân thiện là JDOM. Và bởi nhà phát triển thân thiện, tôi có nghĩa là "java định hướng" (tức là, bạn làm việc với các đối tượng trong chương trình của bạn), thay vì "tài liệu theo định hướng", như một số công cụ khác được.

5

Bạn có thể sử dụng trình phân tích cú pháp DOM đơn giản để đọc biểu diễn xml.

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 

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

Các lớp này có vẻ như trong jdk. Không có phụ thuộc bên ngoài. –

9

Tôi thích JDOM:

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

Đối với một trường hợp sử dụng tương tự trong ứng dụng của tôi, tôi sử dụng JAXB. Với Jaxb, việc đọc các tệp XML giống như tương tác với các Java POJO. Nhưng để sử dụng JAXB, bạn cần có xsd cho tệp xml này. Bạn có thể tìm thêm thông tin here

2

Tôi muốn giới thiệu Commons Digester, cho phép bạn phân tích cú pháp tệp mà không cần viết mã reams. Nó sử dụng một loạt các quy tắc để xác định hành động nào sẽ thực hiện khi gặp phải một phần tử hoặc thuộc tính đã cho (một quy tắc điển hình có thể là tạo một đối tượng nghiệp vụ cụ thể).

0

Nếu bạn muốn để có thể đọc và ghi đối tượng XML trực tiếp, bạn có thể sử dụng XStream

4

Nếu bạn chỉ cần một giải pháp đơn giản đó là bao gồm trong Java SDK (từ 5.0), hãy kiểm tra các gói XPath . Tôi chắc rằng những người khác hoạt động tốt hơn, nhưng đây là tất cả những gì tôi cần. Dưới đây là một ví dụ:

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

Mặc dù tôi đã không cố gắng XPath nhưng vì nó vừa đến sự chú ý của tôi bây giờ, tôi đã thử một vài giải pháp và đã không tìm thấy bất cứ thứ gì phù hợp với kịch bản này.

Tôi quyết định tạo thư viện đáp ứng nhu cầu này miễn là bạn đang làm việc theo các giả định được đề cập trong readme. Nó có lợi thế là nó sử dụng SAX để phân tích cú pháp toàn bộ tệp và trả về cho người dùng dưới dạng bản đồ để bạn có thể tra cứu các giá trị dưới dạng khóa -> giá trị.

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

Nếu có gì thiếu lòng thông báo cho tôi về mục mất tích như tôi chỉ phát triển nó dựa trên nhu cầu của người khác và bản thân mình.

+0

Bạn đang trả lời một bản sao. Vui lòng xem xét trả lời chuỗi gốc. – yacc

+0

@yacc cảm ơn nhận xét của bạn. Tuy nhiên tôi đã xem báo cáo [tiềm năng trùng lặp] (https://stackoverflow.com/questions/428073/what-is-the-best-simplest-way-to-read-in-an-xml-file-in-java -ứng dụng) và nó không phải là mục tiêu trong cách nó được tuyên bố ("tốt nhất/đơn giản nhất" giải pháp). Nếu có một bài đăng khác mà tôi đã bỏ lỡ, vui lòng cung cấp cho tôi liên kết để tôi có thể kiểm tra. Tuy nhiên, trong câu hỏi này, một ví dụ XML đã được cung cấp và câu hỏi rõ ràng đề cập rằng anh ta muốn một giải pháp đòi hỏi rất ít dòng mã. Đây là lý do tại sao tôi đã trả lời điều này. –

Các vấn đề liên quan