包含名为<Name>
的子标记的xml字符串响应,响应可能包含一个或多个<Name>
标记,如下所示,
案例1
String Xml = <School>
<Student>
<Name>Akhil</Name>
<Name>Nikhil</Name>
<Name>Kiran</Name>
</Student>
<School>
案例2
字符串Xml = <School>
<Student>
<Name>Akhil</Name>
</Student>
<School>
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()
那么我怎样才能得到value Akhil
ie:从两个案例中的第一个标签使用一个语句
String name = parsedXml.Student.Name[0].text()
如果我在案例2中使用此语句:那么错误为空
答案 0 :(得分:2)
您可以使用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()
答案 1 :(得分:0)
这样你总会得到一个清单:
def xml1 = '''<School>
<Student>
<Name>Akhil</Name>
<Name>Nikhil</Name>
<Name>Kiran</Name>
</Student>
</School>'''
def xml2 = '''<School>
<Student>
<Name>Akhil</Name>
</Student>
</School>'''
def xml1p = new XmlParser(false,false).parseText(xml1)
def xml2p = new XmlParser(false,false).parseText(xml2)
println xml1p.Student.Name*.text().first() //or [0]
println xml2p.Student.Name*.text().first() //or [0]