2013-02-25 22 views
7

Tôi có một tập tin xml rất đơn giản (tôi nghĩ) như thế này ...Duyệt qua MỖI nút xml với groovy, in ấn mỗi nút

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 

<Things> 
<thing indexNum='1'> 
    <a>123</a> 
    <b>456</b> 
    <c>789</c> 
</thing> 
<thing indexNum='2'> 
    <a>123</a> 
    <b>456</b> 
    <c>789</c> 
</thing> 
</Things> 

Vấn đề tôi phải đối mặt là tôi không thể chỉ đơn giản là có được mỗi nút riêng biệt với mã này ... nó đang in TẤT CẢ những thứ, và những gì tôi thực sự cố gắng làm là thu thập từng nút vào bản đồ, sau đó thẩm vấn/chuyển đổi một số cặp khóa/giá trị trong bản đồ và thay thế chúng (đường xuống đường, tôi biết ..)

Đây là mã khủng khiếp của tôi ... bất kỳ cơ hội ai đó có thể đặt tôi đi đúng hướng?

def counter = 0 

Things.thing.each { tag -> 
    counter++ 
    println "\n-------------------------------- $counter ------------------------------------" 

    Things.thing.children().each { tags -> 
    println "$counter${tags.name()}: $tags" 
    return counter 
    } 
    println "\n$counter things processed...\n" 
} 

Thao tác này dễ dàng hơn trong bản đồ? (Tôi đã tạo xml này với một bản đồ ở nơi đầu tiên, nghĩ rằng sẽ có một số phương pháp dễ dàng để làm việc với XML ... Tôi bắt đầu tự hỏi sau khi goofing xung quanh cho ngày và về cơ bản hư không)

Cảm ơn và Kính trọng

+1

ngày? Bạn đã xem các ví dụ về XML của Groovy chưa? Thu thập * mà * nút và đặt chúng vào một bản đồ? Thật khó để hiểu những gì bạn đang cố gắng làm. –

Trả lời

11

Lý do bạn tiếp tục nhận được các nút bên trong là vì bạn lặp lại không chính xác qua danh sách ngoài hai lần. Vòng lặp bên trong nên lặp chỉ trên tag:

doc = new XmlSlurper().parse("things.xml") 
doc.thing.each { thing -> 
    println "thing index: ${[email protected]}" 
    thing.children().each { tag -> 
    println " ${tag.name()}: ${tag.text()}" 
    } 
} 

Output:

thing index: 1 
    a: 123 
    b: 456 
    c: 789 
thing index: 2 
    a: 123 
    b: 456 
    c: 789 
+0

Cảm ơn bạn! Tôi không hiểu rằng cái tên vòng lặp đầu tiên (như trong '{thing ->') phải khớp chính xác ... đó là lý do tại sao tôi đã đặt trên con đường đầy đủ và nắm lấy mọi thứ hai lần. – user2109043

+0

@ user2109043 Tham số đóng là mỗi đối tượng trong bộ sưu tập, ở đây, thẻ bên ngoài. –

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