xml - 选择scala中节点的所有子元素

标签 xml scala scala-xml

我想选择名为“a”的节点的第一个子元素。我现在得到的是:

(xml \ "a")(0).child.collect {case e: Elem => e}

这很冗长。我在寻找类似的东西:

xml \ "a" \ "*"

这在 Scala 中可行吗?

最佳答案

您不能对 NodeSeq 上的现有 \\\ 方法执行任何操作。 但是您可以使用新的 \* 方法扩展 NodeSeq (注意缺少或空格字符),按照 pimp-your-library 模式:

import xml.{NodeSeq, Elem}

class ChildSelectable(ns: NodeSeq) {
  def \* = ns flatMap { _ match {                                     
    case e:Elem => e.child                                   
    case _ => NodeSeq.Empty                                  
  } }
}

implicit def nodeSeqIsChildSelectable(xml: NodeSeq) = new ChildSelectable(xml)

在 REPL 中,这给了我:

scala> val xml = <a><b><c>xxx</c></b></a>
xml: scala.xml.Elem = <a><b><c>xxx</c></b></a>

scala> xml \*                                                                            
res7: scala.xml.NodeSeq = NodeSeq(<b><c>xxx</c></b>)

scala> xml \ "b" \*
res8: scala.xml.NodeSeq = NodeSeq(<c>xxx</c>)

scala> xml \ "b" \ "c" \*
res9: scala.xml.NodeSeq = NodeSeq(xxx)

关于xml - 选择scala中节点的所有子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4624797/

相关文章:

c# - 使用 LINQ 创建对象

xml - 在 Scala 中,如何使用转换器/重写规则将递增 ID 放入 XML 元素中

xml - Scala XML 模式匹配,顶级元素

.net - 使用小写的所有节点创建自定义 XMLSerializer

javascript - 如何使用jquery查找名称中包含 ':'的xml元素?

php - 使用 PHP DomDocument 区分 HTML 和 XML

xml - 使用具有多个属性的 scala-xml API 进行解析

scala - 如果类型是 HList 的成员,我如何检查无形?

java - ReactiveX:计算 Observable 中不同元素的频率

scala - 我可以在Scala中对类型参数执行匹配以查看其是否实现了特征吗?