Scala 中的 XML 解析似乎并不像应有的那样简单明了。
我需要的是与 JavaScript 中的 document.getElementsByTagName(name) 类似的东西,但出于我的目的,我只需要特定标记名的第一个元素。这是我最终得到的结果:
import scala.xml.{Document, Elem, Node}
import scala.xml.parsing.ConstructingParser
def _getFirstMatchingElementByName(search: String, n: Node): Option[Node] = {
if (n.label == search) {
Some(n)
} else {
var i = 0
var result: Option[Node] = None
try {
while (result == None) {
result = _getFirstMatchingElementByName(search, n.child(i))
i += 1
}
} catch {
case e: IndexOutOfBoundsException => None
}
result
}
}
它基本上是递归的,直到找到匹配项或用尽所有可能性。
既然需要我拥有此能力的功能已经发布,我已经对此进行了更多审查,这真的让我很烦恼。我确信有许多 Java 库可用于帮助解析 XML,但鉴于 Scala 对生成 XML 的本机支持(即它几乎可以在任何地方内联),我很好奇我是否遗漏了什么。
在 Scala 中有没有更好的方法来做到这一点?