带有http客户端调度库的Scala工作表
我正在学习scala,在访问RESTAPI时遇到了一些障碍 以下是当前项目的依赖项:带有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://
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>)