-1

I am working on a groovy xml exercise & as per the problem, i need to write 2 methods:

readFileContent(fileName) - This method is used to read the content from file(xml file) and return that file's content as string.

loadStudents(xmlString) - This method is used to generate the student list using the parameterized xml string(Please parse that xml string(use xmlSlurper) and create the student object and add to the studentList).

i tried using xmlparser.parse(fileName) to create my xmlString, and then used xmlSlurper.parseText in loadStudent method. however, getting content is not allowed prolong error.

Here's my code:

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

here's 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>

Note: i know i can just directly parse the file in xmlSlurper & it works fine. however, this is online exercise & needs to be done using both methods.

Thanks in advance.

vinayP
  • 3
  • 3
  • I think i am going about it all wrong. I am suppose to create an xmlstring first which i am parsing in second method. Probably need to use string builder along with readFile methods. Will give that a try tomorrow. – vinayP May 27 '18 at 06:33

1 Answers1

0

The following code:

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)
  }
}

will print:

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

when run on the xml in your example.

The error you are getting is most probably caused by extra characters at the start of your xml file. This can sometimes also be caused by the parser not allowing the xml declaration at the start of the file. I would start by checking those two things.

Matias Bjarland
  • 4,124
  • 1
  • 13
  • 21