带有http客户端调度库的Scala工作表

带有http客户端调度库的Scala工作表,scala,xml-parsing,httpclient,scala-2.10,Scala,Xml Parsing,Httpclient,Scala 2.10,我正在学习scala,在访问RESTAPI时遇到了一些障碍 以下是当前项目的依赖项: libraryDependencies ++= Seq( "net.databinder.dispatch" %% "dispatch-core" % "0.11.0" ) 下面是我目前在scala工作表中使用的代码 import dispatch._, Defaults._ val request = url(s"http://

我正在学习scala,在访问RESTAPI时遇到了一些障碍

以下是当前项目的依赖项:

libraryDependencies ++= Seq(
  "net.databinder.dispatch" %% "dispatch-core" % "0.11.0"
)  
下面是我目前在scala工作表中使用的代码

import dispatch._, Defaults._

val request = url(s"http://freegeoip.net/xml/www.google.com")


val busTime = Http( request <<? Map("key"->apiKey) OK as.xml.Elem)


def extractTime(xml: scala.xml.Elem) =
    for {
        response <- xml \\ "Response"
    } yield xml

busTime()
奇怪的是,当我将响应解析为一个字符串时,它会很好地显示为有效的xml。虽然这只是一个字符串,但这不是我想要的,如果能够使用上面的功能就太好了

感谢您的帮助,谢谢

更新 根据评论,我想在sbt repl中尝试一下,结果如下:

scala> val request = url(s"http://freegeoip.net/xml/www.google.com")
request: dispatch.Req = Req(<function1>)

scala> var response = Http( request OK as.xml.Elem)
response: dispatch.Future[scala.xml.Elem] = scala.concurrent.impl.Promise$DefaultPromise@7fd2e7a

scala> response()
res2: scala.xml.Elem =
<Response>
    <Ip>173.194.64.106</Ip>
    <CountryCode>US</CountryCode>
    <CountryName>United States</CountryName>
    <RegionCode>CA</RegionCode>
    <RegionName>California</RegionName>
    <City>Mountain View</City>
    <ZipCode>94043</ZipCode>
    <Latitude>37.4192</Latitude>
    <Longitude>-122.0574</Longitude>
    <MetroCode>807</MetroCode>
    <AreaCode>650</AreaCode>
</Response>

scala> def extractTime(xml: scala.xml.Elem) =
     |     for {
     |         response <- xml \\ "Response"
     |     } yield xml
extractTime: (xml: scala.xml.Elem)scala.xml.NodeSeq

scala> extractTime(response())
res3: scala.xml.NodeSeq =
NodeSeq(<Response>
    <Ip>173.194.64.106</Ip>
    <CountryCode>US</CountryCode>
    <CountryName>United States</CountryName>
    <RegionCode>CA</RegionCode>
    <RegionName>California</RegionName>
    <City>Mountain View</City>
    <ZipCode>94043</ZipCode>
    <Latitude>37.4192</Latitude>
    <Longitude>-122.0574</Longitude>
    <MetroCode>807</MetroCode>
    <AreaCode>650</AreaCode>
</Response>)
scala>val请求=urlhttp://freegeoip.net/xml/www.google.com")
请求:dispatch.Req=Req()
scala>var response=Http(请求OK为.xml.Elem)
响应:dispatch.Future[scala.xml.Elem]=scala.concurrent.impl.Promise$DefaultPromise@7fd2e7a
scala>response()
res2:scala.xml.Elem=
173.194.64.106
美国
美国
加利福尼亚州
加利福尼亚
山景
94043
37.4192
-122.0574
807
650
scala>def提取时间(xml:scala.xml.Elem)=
|为了{
|响应提取时间(response())
res3:scala.xml.NodeSeq=
诺德塞克(
173.194.64.106
美国
美国
加利福尼亚州
加利福尼亚
山景
94043
37.4192
-122.0574
807
650
)

因此,现在我的新问题是,为什么这组命令在repl中有效,而在工作表中无效?

这是一个Scala工作表问题,这样标记它会使它更有可能得到一个好的答案。Scala工作表似乎没有可用的标记,我没有足够的代表来创建一个。不过,感谢您的建议我更改了帖子标题“Xerces地狱”是一件事,问题是通过工作表和分派在类路径上有不同的版本。为分派添加一个排除项应该可以解决这个问题。@TravisBrown我听说过“Xerces地狱”不过,我还不太熟悉scala构建过程/环境。目前我正在使用intellij中的scala/sbt插件。关于在何处查找重复依赖项,有什么想法吗?
scala> val request = url(s"http://freegeoip.net/xml/www.google.com")
request: dispatch.Req = Req(<function1>)

scala> var response = Http( request OK as.xml.Elem)
response: dispatch.Future[scala.xml.Elem] = scala.concurrent.impl.Promise$DefaultPromise@7fd2e7a

scala> response()
res2: scala.xml.Elem =
<Response>
    <Ip>173.194.64.106</Ip>
    <CountryCode>US</CountryCode>
    <CountryName>United States</CountryName>
    <RegionCode>CA</RegionCode>
    <RegionName>California</RegionName>
    <City>Mountain View</City>
    <ZipCode>94043</ZipCode>
    <Latitude>37.4192</Latitude>
    <Longitude>-122.0574</Longitude>
    <MetroCode>807</MetroCode>
    <AreaCode>650</AreaCode>
</Response>

scala> def extractTime(xml: scala.xml.Elem) =
     |     for {
     |         response <- xml \\ "Response"
     |     } yield xml
extractTime: (xml: scala.xml.Elem)scala.xml.NodeSeq

scala> extractTime(response())
res3: scala.xml.NodeSeq =
NodeSeq(<Response>
    <Ip>173.194.64.106</Ip>
    <CountryCode>US</CountryCode>
    <CountryName>United States</CountryName>
    <RegionCode>CA</RegionCode>
    <RegionName>California</RegionName>
    <City>Mountain View</City>
    <ZipCode>94043</ZipCode>
    <Latitude>37.4192</Latitude>
    <Longitude>-122.0574</Longitude>
    <MetroCode>807</MetroCode>
    <AreaCode>650</AreaCode>
</Response>)