Groovy:Xml:如何在单个循环中读取解析的xml字符串的文本

有一个xml字符串响应,其中包含名为< Name>的子标记. ,响应可以包含一个或多个< Name>标签如下所示,

情况1

String Xml =< School>
                    <学生>
                        <名称>&AKHIL LT; /名称>
                        <名称>&尼基尔LT; /名称>
                        <名称>&基兰LT; /名称>
                   < /学生>
             <学校>

案例2
String Xml =< School>
                    <学生>
                        <名称>&AKHIL LT; /名称>
                    < /学生>
             <学校>

String parsedXml =  new XmlParser(false,false).parseText(Xml)

如果第一个< Name>内的值为1使用以下语句获取标签

Case 1
     String name = parsedXml.Student.Name[0].text()

在< Name>内的情况2中的值使用以下语句获取标签

Case 2
     String name = parsedXml.Student.Name.text()

那么我如何才能获得价值Akhil ie:从两个案例中的第一个标签使用一个语句

String name = parsedXml.Student.Name[0].text()

如果我在案例2中使用此语句:然后将错误视为null

最佳答案 您可以使用
spread-dot运算符.它将访问具有给定名称的所有子节点.它会返回一个列表,如果你有不规则的xml结构,里面有两个标签盒,那么你可以将它弄平.

String xml ="""<School>
  <Student>
    <Name>Akhil</Name>
    <Name>Nikhil</Name>
    <Name>Kiran</Name>
  </Student>
  <Student>
    <Name>Akhil2</Name>
  </Student>
</School>"""

def res = new XmlParser().parseText(xml).Student*.Name.flatten()*.text()
println(res) //[Akhil, Nikhil, Kiran, Akhil2]

编辑:

这一行会给你[Akhil,Akhil2]作为输出.

new XmlParser().parseText(xml).Student*.Name.collect { it[0] }*.text()
点赞