0

我正在尝试编写一个桥接函数来将 XML 数据转换为 Json 格式,下面是我拥有的示例 xml 文件的数据是

<testsuites>  <testsuite tests="4" failures="4" errors="0" name="AT">
   <testcase name="#1 notificate › v1 › announcement › announcement.feature/#TEST CASE: Notification: Send an announcement: Send an announcement using the minimum requirements"/>
   <testcase name="#2 notifiivate › v1 › announcement › announcement.feature/#TEST CASE: Notification: Send an ant"/>    
   <testcase name="#1 No tests found in features/tests/auth/auth.POST.js">
      <failure/>
    </testcase>
    <testcase name="#2 versioninfo › versioninfo › versioninfo.feature/#TEST CASE: CDP ADMIN: Get version info: Get the version of the CDP service">
      <failure>
            name: AssertionError
            message: Rejected promise returned by test
            values: 
      </failure>
    </testcase>
    <testcase name="#3 projects › edit_entitlement › edit_entitlement.feature/#TEST CASE: CDP ADMIN: Edit Entitlement: Attempt to edit an entitlement_id to be a negative number">
      <failure>
          ---
            name: AssertionError
            message: Rejected promise returned by test
            values: 
          ...
      </failure>
    </testcase>
  </testsuite>
</testsuites>

我正在尝试用 groovy 编写一个函数来获取以下 json 格式

{
testsuites{
    "testsuite": {
        "tests": "4",
        "failures": "4",
        "errors": "0",
        "name": "AT-cdpServer.Default",
        "testcase": [
        {
            "name": "#1 notificate › v1 › announcement › Send an announcement: Send an announcement using the minimum requirements"
        },
        {
            "name": "#2 notifiivate › v1 › announcement › announcement.feature/#TEST CASE: Notification: Send an ant"
        },
            {
                "name": "#1 No tests found in features/tests/auth/auth.POST.js",
                "failure": []
            },
            {
                "name": "#2 versioninfo › versioninfo › versioninfo.feature/#TEST CASE: CDP ADMIN: Get version info: Get the version of the CDP service",
                "failure": "---\n            name: AssertionError\n            message: Rejected promise returned by test\n            values: {\"Rejected promise returned by test. Reason:\":\"Error {\\n  message: 'no schema with key or ref \\\"/versioninfo.get.200\\\"',\\n}\"}\n            at: Ajv.validate (node_modules/ajv/lib/ajv.js:95:19)\n          ..."
            },
            {
                "name": "#3 projects › edit_entitlement › edit_entitlement.feature/#TEST CASE: CDP ADMIN: Edit Entitlement: Attempt to edit an entitlement_id to be a negative number",
                "failure": "---\n            name: AssertionError\n            message: Rejected promise returned by test\n            values: {\"Rejected promise returned by test. Reason:\":\"TypeError {\\n  message: 'Only absolute URLs are supported',\\n}\"}\n             ..."
            },
        ]
    }
}}
}

感谢您在正确方向上的任何投入,谢谢

到目前为止,我有这个,它读取所有数据,但结构已关闭

def toJsonBuilder(xml){     
def xmlToJson = build(new XmlSlurper().parseText(xml)) 
new groovy.json.JsonBuilder(xmlToJson) 
} 

def build(node){
    if (node instanceof String){ 
        return // ignore strings...     
    }     
    def map = [(node.name()): node.collect]
    if (!node.attributes().isEmpty()) { 
         map.put(node.name(),node.attributes().collectEntries{it})
    }     
    if (!node.children().isEmpty() && !(node.children().getAt(0) instanceof String)) {  
        map.put(node.children().name, node.children().collect{build(it)}.findAll{it != null})     
    } else if (node.text() != ''){
        map.put(node.name(), node.text())     
    } 

    map 
  }
4

0 回答 0