Java Scala没有';t将循环内的元素转换为屈服值
我对scala还很陌生。我有这个方法来过滤所有以给定名称空间开始的元素(来自Jsoup库)Java Scala没有';t将循环内的元素转换为屈服值,java,scala,jsoup,Java,Scala,Jsoup,我对scala还很陌生。我有这个方法来过滤所有以给定名称空间开始的元素(来自Jsoup库) def getElementsByNamespace(element: org.jsoup.nodes.Element, namespace: String) : org.jsoup.select.Elements = { val elements = for { el <- element.select("*") if el.tagName()
def getElementsByNamespace(element: org.jsoup.nodes.Element, namespace: String) : org.jsoup.select.Elements = {
val elements =
for {
el <- element.select("*")
if el.tagName().startWith(namespace+":")
} yield el
elements
}
def getElementsByNamespace(元素:org.jsoup.nodes.element,命名空间:String):org.jsoup.select.Elements={
val元素=
为了{
el我认为您可能需要添加importscala.collenction.JavaConversions
事情是元素
类,由选择
方法返回的一个不支持理解-因为它是数组列表
的扩展,因此没有映射
,平面映射
和过滤器
方法-除非您对其中一个scala集合进行隐式转换您可能需要添加导入scala.collenction.JavaConversions.\u
事情是元素
类,由选择
方法返回的一个不支持理解-因为它是数组列表
的扩展,因此没有映射
,平面映射
和过滤器
方法-除非您对其中一个scala集合进行隐式转换。简短回答(tl;dr)
问题是您需要在Scala和Java集合之间进行转换:
def getElementsByNamespace(element: org.jsoup.nodes.Element, namespace: String): org.jsoup.select.Elements = {
import collection.JavaConverters._
val elements = for {
el <- element.select("*").asScala
if el.tagName().startsWith(s"$namespace:")
} yield el
new Elements(elements.asJava)
}
def getElementsByNamespace(元素:org.jsoup.nodes.element,命名空间:String):org.jsoup.select.Elements={
导入collection.JavaConverters_
val元素=用于{
el简短回答(tl;dr)
问题是您需要在Scala和Java集合之间进行转换:
def getElementsByNamespace(element: org.jsoup.nodes.Element, namespace: String): org.jsoup.select.Elements = {
import collection.JavaConverters._
val elements = for {
el <- element.select("*").asScala
if el.tagName().startsWith(s"$namespace:")
} yield el
new Elements(elements.asJava)
}
def getElementsByNamespace(元素:org.jsoup.nodes.element,命名空间:String):org.jsoup.select.Elements={
导入collection.JavaConverters_
val元素=用于{
el这并不能解决为什么不能使用Elements
来理解的问题,但为什么不使用select(namespace |*)
语法来获得相同的结果?@cyrilecorpet不正确。根据Jsoup版本1.10.2,该功能不受支持。您当然可以使用select(“*| element”)
但不是相反。我已经测试了很多次,它返回了一个空的元素对象。这个线程->声明上述功能不受JSoup支持,即使它是CSS规范的一部分。奇怪的是,我在JSoup文档中看到了这一点:链接文档没有提到使用通配符*不是吗o匹配特定名称空间中的所有元素。这并不能解决为什么不能在理解中使用元素的问题,但为什么不使用选择(名称空间|*)
syntax以获得相同的结果?@cyrilecorpet不正确。根据Jsoup版本1.10.2,该功能不受支持。您当然可以执行select(“*|元素”)
但不是相反。我已经测试了很多次,它返回了一个空的元素对象。这个线程->声明上述功能不受JSoup支持,即使它是CSS规范的一部分。奇怪的是,我在JSoup文档中看到了这一点:链接文档没有提到使用通配符*不是吗o匹配特定名称空间中的所有元素。除非代码仅用于学习目的,否则请使用select(名称空间|*)
comments中@Cyrille提到的方法,它是一个选择器,可以精确地为您提供所需内容:给定命名空间的所有元素。根据Jsoup版本1.10.2,该功能不受支持。您当然可以执行select(“*| element”)
但不是相反。我已经测试了很多次,它返回一个空元素object除非代码只是为了学习,否则请使用选择(名称空间|*)
comments中@Cyrille提到的方法,它是一个选择器,可以精确地为您提供所需内容:给定命名空间的所有元素。根据Jsoup版本1.10.2,该功能不受支持。您当然可以执行select(“*| element”)
但不是相反。我对它进行了多次测试,它返回一个空元素对象