Javascript 从XML字符串到动态;列表“;输出

Javascript 从XML字符串到动态;列表“;输出,javascript,java,xml,groovy,Javascript,Java,Xml,Groovy,下午好, 我在找这方面的建议。最后,我正在接近我想要的输出 import groovy.xml.XmlSlurper String XML = ''' <results> <result> <Firstname>Marco</Firstname> <Surname>Alves</Surname> <Age>33</Age> <Address>L

下午好, 我在找这方面的建议。最后,我正在接近我想要的输出

import groovy.xml.XmlSlurper

String XML = '''
    <results>
  <result>
    <Firstname>Marco</Firstname>
    <Surname>Alves</Surname>
    <Age>33</Age>
    <Address>Lisbon</Address>
    <ALIAS>Valentino Rossi</ALIAS>
  </result>
  <result>
    <Firstname>André</Firstname>
    <Surname>Vieira</Surname>
    <Age>31</Age>
    <Address>Lisbon</Address>
  </result>
  <result>
    <FirstName>Pedro</FirstName>
    <Surname>Kuclo</Surname>
  </result>
  <result>
    <Address>Lisbon</Address>
    <Surname>Kuclo</Surname>
  </result>
</results>
'''
         
def people = new XmlSlurper().parseText(XML)
people.result.findAll { m ->
    m.Firstname.toString().contains("Marco")
}.each { m ->
    println(m)
}
有人有实现这个输出的想法吗

List { "Marco", "Alves", "33", "Lisbon", "Valentino Rossi }
比如说,输出必须是动态的,而不定义“{m.Firstname}\n${m.lasname}”

到目前为止,我尝试的是:

// println("\n${m.Firstname} \n${m.Surname} \n${m.Address} \n${m.age}\n${m.ALIAS}")

但通过这种方式,我必须定义输出,并且我希望它是动态的。

如果您希望返回一个包含特定属性或以不同顺序返回属性的列表,您可以使用collect方法收集每个匹配项的元素,但您认为合适,并将其作为列表返回:

String XML = '''
    <results>
  <result>
    <Firstname>Marco</Firstname>
    <Surname>Alves</Surname>
    <Age>33</Age>
    <Address>Lisbon</Address>
    <ALIAS>Valentino Rossi</ALIAS>
  </result>
  <result>
    <Firstname>André</Firstname>
    <Surname>Vieira</Surname>
    <Age>31</Age>
    <Address>Lisbon</Address>
  </result>
  <result>
    <FirstName>Pedro</FirstName>
    <Surname>Kuclo</Surname>
  </result>
  <result>
    <Address>Lisbon</Address>
    <Surname>Kuclo</Surname>
  </result>  
</results>
'''

def people = new XmlSlurper().parseText(XML)
def results = people.result.findAll { m ->
    m.Firstname.toString().contains("Marco")
}.collect{ it ->
   [it.Firstname, it.Surname, it.Age, it.Address, it.ALIAS]
}

println results
这将产生以下结果:

[
  {
    "Firstname":"Marco",
    "Surname":"Alves",
    "Age":"33",
    "Address":"Lisbon",
    "ALIAS":"Valentino Rossi"
  }
]

如果要返回包含特定属性或不同顺序属性的列表,可以使用collect方法收集每个匹配条目的元素(无论您认为合适与否),并将其作为列表返回:

String XML = '''
    <results>
  <result>
    <Firstname>Marco</Firstname>
    <Surname>Alves</Surname>
    <Age>33</Age>
    <Address>Lisbon</Address>
    <ALIAS>Valentino Rossi</ALIAS>
  </result>
  <result>
    <Firstname>André</Firstname>
    <Surname>Vieira</Surname>
    <Age>31</Age>
    <Address>Lisbon</Address>
  </result>
  <result>
    <FirstName>Pedro</FirstName>
    <Surname>Kuclo</Surname>
  </result>
  <result>
    <Address>Lisbon</Address>
    <Surname>Kuclo</Surname>
  </result>  
</results>
'''

def people = new XmlSlurper().parseText(XML)
def results = people.result.findAll { m ->
    m.Firstname.toString().contains("Marco")
}.collect{ it ->
   [it.Firstname, it.Surname, it.Age, it.Address, it.ALIAS]
}

println results
这将产生以下结果:

[
  {
    "Firstname":"Marco",
    "Surname":"Alves",
    "Age":"33",
    "Address":"Lisbon",
    "ALIAS":"Valentino Rossi"
  }
]

是否要输出JSON?或者,
List
是输出的一部分吗?您好,亲爱的@cfrick JSON会工作得很好。您想输出JSON吗?或者,
List
是输出的一部分吗?您好,亲爱的@cfrick JSON会工作得很好。因此,您并不希望以特定的方式排列顺序,只希望将每个结果的所有字段以及匹配的名称添加到列表中的结果中?您好@pczeus`[{“名字”:“马可”,“姓氏”:“阿尔维斯”,“年龄”:“33”,“地址”:“里斯本”,“别名”:“瓦伦蒂诺·罗西”}`您可以将输出修改为:`[{“马可”,“阿尔维斯”,“33”,“里斯本”,“瓦伦蒂诺·罗西”}`是否可能?提前感谢您:您要求的不再是JSON,它应该是name:value对格式。现在您需要的是一个列表列表,其中每个嵌套列表包含值字符串。无论采用哪种方式,您都可以根据自己的需要稍微修改上面的代码,以便轻松完成。我成功地实现了这个结果。但你的帮助就是一切,明天我会给你看密码。非常感谢你,伙计@pczeusHello@pczeus`}.collect{result->result.children().collectMany{child->[child.text()]}//这将仅收集子名称,以获得类似“Firstname”的子文本:Marco-Use:child.name()。这两个参数都可以使用。println(results)`我刚加了一个小改动,它就开始工作了!谢谢,并不是您希望以特定的方式排列顺序,而是希望将每个结果的所有字段(具有匹配名称)添加到列表中的结果中?您好@pczeus`[{“名字”:“马可”,“姓氏”:“阿尔维斯”,“年龄”:“33”,“地址”:“里斯本”,“别名”:“瓦伦蒂诺·罗西”}`您可以将输出修改为:`[{“马可”,“阿尔维斯”,“33”,“里斯本”,“瓦伦蒂诺·罗西”}`是否可能?提前感谢您:您要求的不再是JSON,它应该是name:value对格式。现在您需要的是一个列表列表,其中每个嵌套列表包含值字符串。无论采用哪种方式,您都可以根据自己的需要稍微修改上面的代码,以便轻松完成。我成功地实现了这个结果。但你的帮助就是一切,明天我会给你看密码。非常感谢你,伙计@pczeusHello@pczeus`}.collect{result->result.children().collectMany{child->[child.text()]}//这将仅收集子名称,以获得类似“Firstname”的子文本:Marco-Use:child.name()。这两个参数都可以使用。println(results)`我刚加了一个小改动,它就开始工作了!非常感谢。