Groovy XMLParser & XMLSlurper - PullRequest
       28

Groovy XMLParser & XMLSlurper

0 голосов
/ 27 мая 2018

Я работаю над отличным упражнением xml и в соответствии с проблемой мне нужно написать 2 метода:

readFileContent (fileName) - этот метод используется для чтения содержимого из файла (файл xml) ивернуть содержимое этого файла в виде строки.

loadStudents (xmlString) - Этот метод используется для создания списка студентов с использованием параметризованной строки XML (пожалуйста, проанализируйте эту строку XML (используйте xmlSlurper) и создайте объект студента и добавьте вthe studentList).

Я попытался использовать xmlparser.parse (fileName) для создания моего xmlString, а затем использовал xmlSlurper.parseText в методе loadStudent.однако, получение контента не допускается, продлевать ошибку.

Вот мой код:

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 и работает нормально.однако это онлайн-упражнение, и его нужно выполнять обоими способами.

Заранее спасибо.

1 Ответ

0 голосов
/ 27 мая 2018

Следующий код:

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 в начале файла.Я бы начал с проверки этих двух вещей.

...