有一个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()