2017-11-01 9 views
1

XML 인덱스를 찾는 좋은 방법을 찾는데 문제가 있습니다. 예 :Groovy : 노드 인덱스

String test = ''' 
<Library> 
<Books> 
    <Book> 
    <Title>Hello</Title> 
    <Author>John Doe</Author> 
    <Publication>2008</Publication> 
    </Book> 
    <Book> 
    <Title>Bye</Title> 
    <Author>Mary Derp</Author> 
    <Publication>2011</Publication> 
    </Book> 
    [...] 
</Books> 
</Library>''' 

def xml = new XmlSlurper().parseText(test) 

이제 제목이 "안녕"이고 작성자가 "Mary Derp"인 책이 있는지 알고 싶습니다. 그리고 사실이라면 노드의 인덱스를 말해야합니다. 그래서이 경우 node [1].

+0

사용 사례는 무엇입니까? – Rao

+0

지금까지 해보신 것은 무엇입니까? –

답변

1

'발견'일치하는 책의 색인 목록을 포함합니다 :

String test = ''' 
<Library> 
<Books> 
    <Book> 
    <Title>Hello</Title> 
    <Author>John Doe</Author> 
    <Publication>2008</Publication> 
    </Book> 
    <Book> 
    <Title>Bye</Title> 
    <Author>Mary Derp</Author> 
    <Publication>2011</Publication> 
    </Book> 
    <Book> 
    <Title>Hello</Title> 
    <Author>Mary Derp</Author> 
    <Publication>2012</Publication> 
    </Book> 
    <Book> 
    <Title>Bye</Title> 
    <Author>Mary Derp</Author> 
    <Publication>2012</Publication> 
    </Book> 
</Books> 
</Library>''' 

def found = [] 
def Library = new XmlSlurper().parseText(test) 
Library.Books.Book.eachWithIndex { def book, int i -> 
    if (book.Title == 'Bye' && book.Author == 'Mary Derp') { 
     found += i 
    } 
} 
println found 

그래서이 경우에는 반환 [1, 3]

1

는 다음을 고려하십시오. 도서를 불리언 (collect 경유)에 매핑 한 다음 첫 번째 true 값을 찾습니다. ( : 단순화)

def Library = new XmlSlurper().parseText(test) 

def index = Library.Books.Book.collect { 
    (it.Title == 'Bye' && it.Author == 'Mary Derp') 
}.indexOf(true) 

assert 1 == index