xml解析和返回对象列表
在scala中,是否有一种简单的方法可以将XML文档的所有元素表示为列表 我的代码:xml解析和返回对象列表,xml,scala,Xml,Scala,在scala中,是否有一种简单的方法可以将XML文档的所有元素表示为列表 我的代码: object HelloWorld { def main(args: Array[String]) { val res="76561193756669631" val url=("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXYYYZZZ&steamids="+res+"&
object HelloWorld {
def main(args: Array[String]) {
val res="76561193756669631"
val url=("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXYYYZZZ&steamids="+res+"&format=xml")
val str = scala.io.Source.fromURL(url.toString,"utf-8").mkString
val x=xml.XML.loadString(str)
var r=(x\\"steamid").mkString
r=r.replaceAll("""<[a-zA-Z0-9/]*?>""","")
println(r)
}}
以下是获得这些元素所需的操作:
import scala.xml._
val x = <response>
<players>
<player>
<steamid>76561193756669631</steamid>
<communityvisibilitystate>3</communityvisibilitystate>
<personaname>*******je01</personaname>
<lastlogoff>1320236285</lastlogoff>
<profileurl>
http://steamcommunity.com/profiles/76561193756669631/
</profileurl>
<avatar>
https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg
</avatar>
<avatarmedium>
https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb_medium.jpg
</avatarmedium>
<avatarfull>
https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb_full.jpg
</avatarfull>
<personastate>0</personastate>
<primaryclanid>103582791429521408</primaryclanid>
<timecreated>1320224696</timecreated>
<personastateflags>0</personastateflags>
</player>
</players>
</response>
val allNodes = x \\ "response" \\ "players" \\ "player" flatMap(_.child)
allNodes.foreach(n => println(s"label: ${n.label} -> text: ${n.text}"))
这正是我想要的,但我不知道
标签:#PCDATA->text:
是从哪里来的。当我查看源代码时,我根本看不到它。它是否以某种方式隐藏在XML中?如果是这样的话,我可以把它过滤掉吗?这里:println(s“label:${n.label}->text:${n.text}”)
这是Scala中字符串的糖。allNodes是NodeSeq,您可以对其进行迭代。您看到的是close标记和open标记之间的文本。在本例中,只有白色字符(空格和新行),但是如果您在
和
之间放置一些文本,您将在输出中看到它作为#PCDATA
。您可以使用以下内容将其过滤掉:x\\“response”\\“players”\\“player”平面图(\.child)过滤器(!\.isAtom)
steamid: 76561193756669631
communityvisibilitystate: 3
personaname: *******je01
....
import scala.xml._
val x = <response>
<players>
<player>
<steamid>76561193756669631</steamid>
<communityvisibilitystate>3</communityvisibilitystate>
<personaname>*******je01</personaname>
<lastlogoff>1320236285</lastlogoff>
<profileurl>
http://steamcommunity.com/profiles/76561193756669631/
</profileurl>
<avatar>
https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg
</avatar>
<avatarmedium>
https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb_medium.jpg
</avatarmedium>
<avatarfull>
https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb_full.jpg
</avatarfull>
<personastate>0</personastate>
<primaryclanid>103582791429521408</primaryclanid>
<timecreated>1320224696</timecreated>
<personastateflags>0</personastateflags>
</player>
</players>
</response>
val allNodes = x \\ "response" \\ "players" \\ "player" flatMap(_.child)
allNodes.foreach(n => println(s"label: ${n.label} -> text: ${n.text}"))
label: #PCDATA -> text:
label: steamid -> text: 76561193756669631
label: #PCDATA -> text:
label: communityvisibilitystate -> text: 3
label: #PCDATA -> text:
label: personaname -> text: *******je01
label: #PCDATA -> text:
label: lastlogoff -> text: 1320236285
label: #PCDATA -> text:
label: profileurl -> text:
http://steamcommunity.com/profiles/76561193756669631/
label: #PCDATA -> text:
label: avatar -> text:
https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb.jpg
label: #PCDATA -> text:
label: avatarmedium -> text:
https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb_medium.jpg
label: #PCDATA -> text:
label: avatarfull -> text:
https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb_full.jpg
label: #PCDATA -> text:
label: personastate -> text: 0
label: #PCDATA -> text:
label: primaryclanid -> text: 103582791429521408
label: #PCDATA -> text:
label: timecreated -> text: 1320224696
label: #PCDATA -> text:
label: personastateflags -> text: 0
label: #PCDATA -> text: