Groovy XMLParser&的XmlSlurper

时间:2018-05-27 06:09:12

标签: groovy xmlslurper

我正在进行一次groovy xml练习&根据问题,我需要编写两种方法:

readFileContent(fileName) - 此方法用于从文件(xml文件)中读取内容,并将该文件的内容作为字符串返回。

loadStudents(xmlString) - 此方法用于使用参数化的xml字符串生成学生列表(请解析该xml字符串(使用xmlSlurper)并创建学生对象并添加到studentList)。

我尝试使用xmlparser.parse(fileName)创建我的xmlString,然后在loadStudent方法中使用xmlSlurper.parseText。但是,获取内容不允许延长错误。

这是我的代码:

def xmlString  = new XmlParser().parse(fileName)
def students = new XmlSlurper().parseText(xmlString)

这里的xml:

<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student>
<id>1</id>
<registerNumber>1225</registerNumber>
<name>Madison</name>
</student>
<student>
<id>3</id>
<registerNumber>4152</registerNumber>
<name>Paul</name>
</student>
<student>
<id>5</id>
<registerNumber>1785</registerNumber>
<name>Sam</name>
</student>
<student>
<id>2</id>
<registerNumber>4158</registerNumber>
<name>Jason</name>
</student>
<student>
<id>4</id>
<registerNumber>1674</registerNumber>
<name>Harry</name>
</student>
</students>

注意:我知道我可以直接解析xmlSlurper&amp;中的文件。它工作正常。然而,这是在线练习&amp;需要使用这两种方法来完成。

提前致谢。

1 个答案:

答案 0 :(得分:0)

以下代码:

def data     = readFileContent('data.xml')
def students = loadStudents(data)
students.each { s ->
  println "${s.name} -> ${s.number}"
}

class Student { 
  def name 
  def number
}

String readFileContent(fileName) { 
  new File(fileName).text
}

def loadStudents(xmlString) { 
  def parser = new XmlSlurper() 
  parser.parseText(xmlString).student.collect { s -> 
    new Student(name: s.name, number: s.registerNumber)
  }
}

将打印:

Madison -> 1225
Paul -> 4152
Sam -> 1785
Jason -> 4158
Harry -> 1674

在您的示例中运行xml时。

您获得的错误很可能是由xml文件开头的额外字符引起的。这有时也可能是由于解析器不允许在文件开头的xml声明引起的。我会从检查这两件事开始。