Синтаксический анализ XML в Scala не кажется таким простым и понятным, как следовало бы.
Мне нужно было что-то похожее на document.getElementsByTagName (name) в JavaScript, но для моих целей все, что мне было нужно, это первый элемент определенного имени тега. Вот что я закончил:
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?