Jsoup将任何元素与命名空间匹配

时间:2017-03-24 17:59:27

标签: java css xml scala jsoup

我想使用Jsoup css选择器返回具有特定命名空间的所有元素,例如<server:cpu> <server:memory>

Document doc = Jsoup.parse("<server:cpu> <server:memory>");
Elements el = doc.select("sever|*");

但是返回Could not parse query例外

此文档https://jsoup.org/apidocs/org/jsoup/select/Selector.html表示您可以使用:

  

* |任何名称空间ns中的E类E元素

但我想做相反的事情:获取任何类型的命名空间ns中的元素。这可能吗?

编辑: 我不再获得异常,但是在执行doc.select("sever|*");

后我得到一个空的Elements对象

1 个答案:

答案 0 :(得分:1)

我在Scala中编写了一些东西来完成与通配符()的命名空间匹配,即(&#34; namespace | &#34;),因为JSoup版本1.10.2不支持

def getElementsByNamespace(element: org.jsoup.nodes.Element, namespace: String): org.jsoup.select.Elements = {
    import collection.JavaConverters._
    val elements = element.select("*").asScala.filter(_.tagName().startsWith(s"$namespace:"))
    new Elements(elements.asJava)
  }

对于java版本,请参阅@Pshemo

建议的链接https://stackoverflow.com/a/23766900

感谢@NaderHadjiGhanbari帮助我理解并从Java集合转换为Scala集合