2014-04-29 70 views
0

我想解析一個大的XML文件來轉換成JSON文檔,我想創建一個方法來構造XmlSlurper查找表達式,但我遇到了麻煩。Groovy XmlSlurper方法來創建GPath

這裏是XML的一個片段:

<site> 
    <metrics> 
    <ruleScore> 
     <avg>89.0</avg> 
    </ruleScore> 
    </metrics> 
</site> 

這裏是方法:

static def getDecNode(String parentNode String childNode) { 
    return data.metrics.parentNode.childNode.find { it.name() == childNode }.toDouble() 
} 

從那裏我會叫它像:

def root = json { 
    type record 
    time { $date timestamp } 
    data { 
     ruleScore { 
      avg getDecNode("ruleScore","avg") 
     } 
    } 
} 

回答

1

您可以getDecNode一個閉包,它將允許訪問腳本中存在的已解析xml,然後構建json。還注意到,封閉內執行(的GString的使用):上述

def xml=''' 
<site> 
    <metrics> 
    <ruleScore> 
     <avg>89.0</avg> 
    </ruleScore> 
    </metrics> 
</site> 
''' 

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

def getDecNode = {String parentNode, String childNode -> 
    slurper.metrics."$parentNode" 
        ."$childNode" 
        .find { it.name() == childNode } 
        .toDouble() 
} 

//Building JSON 
def builder = new groovy.json.JsonBuilder() 
builder { 
    type 'record' 
    time { $date 'timestamp' } 
    data { 
     ruleScore { 
      avg getDecNode("ruleScore","avg") 
     } 
    } 
} 

builder.toPrettyString() 

注意,我假定JSON元件值作爲字符串,因此'record''timestamp'。根據要求可以更換它們。

我不能預見方法/閉包的單獨實現計劃的好處,但我認爲基於xml的大小,意圖會有所不同。

+0

謝謝,這個伎倆......是的,我發佈的XML是一個非常簡化的版本。 – JamesE