2011-04-27 47 views
0

我有一個方法需要搜索一個xml文件,該文件是按名稱使用XmlParser爲一個元素解析的,並且只有當該元素是一個結束節點時才返回它。例如:大小從使用XmlParser解析的文件確定一個結束節點

class xmlTest extends GroovyTestCase { 
    def void test(){ 
     def xmlBody = """ 
     <rootElement> 
      <elementWithOneChild> 
       <endElement>Here is the end</endElement> 
      </elementWithOneChild> 
      <elementWithManyChildren> 
       <one>1</one> 
       <two>1</two> 
       <three>1</three> 
      </elementWithManyChildren> 
     </rootElement>""" 

    def parsedBody = new XmlParser().parseText(xmlBody) 

    def search1 = parsedBody.depthFirst().grep({it.name() == "elementWithOneChild"}) 
    println search1[0].children().size() 

    def search2 = parsedBody.depthFirst().grep({it.name() == "endElement"}) 
    println search2[0].children().size() 

    def search3 = parsedBody.depthFirst().grep({it.name() == "elementWithManyChildren"}) 
    println search3[0].children().size() 
    } 
} 

我嘗試使用Node.children()()的作品,除了其中一個元素包含一個子元素的1對1的情況。在這種情況下,search1.children()。size()和search2.children()。size()都返回1.雖然,elementWithManyChildren的大小是3.我正在尋找一些方法能夠告訴結束節點除了有一個孩子的元素。我已經找到工作

一種方法是:

try{ 
    search1[0].children().iterator().next().name() 
}catch(e){ 
    //If the next node does not have a name, it is an end node 
} 

但是這種解決方案似乎只是一個窮。

回答

0

可能會浪費了幾個週期的,但這應該讓你找到終端節點

assert search1[0].'**'.size() == 2 
assert search2[0].'**'.size() == 1 
assert search3[0].'**'.size() == 4 
+0

謝謝,這似乎工作,而不是特定的深度。你能解釋一下'**'在做什麼嗎? – 2011-04-27 16:23:23

相關問題