2010-10-02 28 views
5

Tôi hiện đang sử dụng JDOM để thực hiện phân tích cú pháp XML đơn giản và có vẻ như không có kiểu nào an toàn - tôi có vấn đề tương tự với việc sử dụng trình phân tích cú pháp Java DOM tích hợp, chỉ với nhiều API hơn.Tôi làm cách nào để thực hiện các truy vấn Xpath loại an toàn trong Java?

Ví dụ, XPath.selectNodes mất một Object như là đối số của nó và trả về một danh sách nguyên liệu, mà chỉ cảm thấy một chút Java 1.1

Có generic-ized XML và XPath thư viện cho Java, hoặc là có một số lý do tại sao nó là chỉ không thể thực hiện các truy vấn XPath theo cách an toàn?

Trả lời

1

Nếu bạn đã quen thuộc với bộ chọn CSS trên HTML, có thể bạn nên biết rằng Jsoup cũng hỗ trợ XML.


Cập nhật: OK, đã được trao downvote rõ ràng là một câu trả lời rất nhiều tranh cãi. Tuy nhiên nó có thể kết thúc dễ dàng hơn và ít chi tiết hơn Xpath khi tất cả những gì bạn muốn là chọn các giá trị nút. API Jsoup cụ thể là rất trơn. Hãy đưa ra một ví dụ cụ thể hơn một chút. Giả sử rằng bạn có một tập tin XML mà trông như thế này:

<?xml version="1.0" encoding="UTF-8"?> 
<persons> 
    <person id="1"> 
     <name>John Doe</name> 
     <age>30</age> 
     <address> 
      <street>Main street 1</street> 
      <city>Los Angeles</city> 
     </address> 
    </person> 
    <person id="2"> 
     <name>Jane Doe</name> 
     <age>40</age> 
     <address> 
      <street>Park Avenue 1</street> 
      <city>New York</city> 
     </address> 
    </person> 
</persons> 

Sau đó, bạn có thể đi qua nó như sau:

Document document = Jsoup.parse(new File("/persons.xml"), "UTF-8"); 

Element person2 = document.select("person[id=2]").first(); 
System.out.println(person2.select("name").text()); 

Elements streets = document.select("street"); 
for (Element street : streets) { 
    System.out.println(street.text()); 
} 

mà kết quả đầu ra

 
Jane Doe 
Main street 1 
Park Avenue 1 

Cập nhật 2 : kể từ khi Jsoup 1.6.2 được phát hành vào tháng 3 năm 2012, phân tích cú pháp XML chính thức hỗ trợ được chỉnh sửa bởi API Jsoup.

+1

Tôi nghĩ rằng đó có thể là những gì tôi đang tìm kiếm - có vẻ như nó không nghiêm ngặt như JDOM (không xác nhận), nhưng tôi thích API. – decitrig

+0

Bạn được chào đón. – BalusC

+0

Tôi đã đăng phần thưởng để thêm hỗ trợ truy vấn xpath vào jsoup nếu bất kỳ nhà phát triển nào muốn thêm tính năng này trong http://nextsprocket.com/tasks/add-xpath-to-jsoup-java-html-parser-library –

1

AFAIK tất cả các truy vấn xml trong java không an toàn và hầu hết đều tương thích với java 1.3. Điều đó cho biết trình phân tích cú pháp/trình tạo ưa thích của tôi là trình phân tích cú pháp kiểu xml pull parser (xmlpp). Tôi tin rằng java có XmlStreamReader và XmlStreamWriter nếu bạn đang sử dụng 1,6 mà gần như giống như thư viện xmlpp. Tôi đặc biệt thích rằng tôi có thể viết một phương thức getFoo để lấy một trình đọc luồng và lấy từ nó và trả về một đối tượng Foo. Đó là loại tốt nhất giữa DOM và SAX. Tôi nghĩ rằng nó có thể được gọi là StAX của một số.
Tôi nhận được một chút ramble-y vì vậy tôi đang bỏ bây giờ

+0

Thú vị , nhưng toàn bộ vấn đề là tôi không muốn viết toàn bộ trình phân tích cú pháp - tôi chỉ muốn thông tin ra khỏi tệp XML với tối thiểu cú pháp. – decitrig

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