groovyxmlparser&;XMLSlurper

groovyxmlparser&;XMLSlurper,groovy,xmlslurper,Groovy,Xmlslurper,我正在进行groovy xml练习&根据这个问题,我需要编写两个方法: readFileContent(fileName)-此方法用于从文件(xml文件)中读取内容并以字符串形式返回该文件的内容 loadStudents(xmlString)-此方法用于使用参数化xml字符串生成学生列表(请解析该xml字符串(使用xmlSlurper)并创建学生对象并添加到studentList) 我尝试使用xmlparser.parse(文件名)创建xmlString,然后在loadStudent方法中使用x

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

readFileContent(fileName)-此方法用于从文件(xml文件)中读取内容并以字符串形式返回该文件的内容

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

我尝试使用xmlparser.parse(文件名)创建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>

1.
1225
麦迪逊
3.
4152
保罗
5.
1785
山姆
2.
4158
杰森
4.
1674
骚扰
注意:我知道我可以直接在xmlSlurper中解析文件&它工作得很好。然而,这是在线练习&需要使用这两种方法

提前感谢。

以下代码:

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。我会先检查这两件事

我想我完全搞错了。我假设首先创建一个xmlstring,然后在第二个方法中解析它。可能需要将字符串生成器与readFile方法一起使用。我明天会试试的。谢谢。这起作用了。我在第一个方法中错误地传递了文件名参数。如果答案实际上解决了你的问题,请考虑把它标记为一个被接受的答案。否则,其他人也会试图为您找到解决方案。谢谢。stackoverflow是新手,所以我不知道。我现在已经做了。