Обработка необязательных атрибутов xml в Scala

У меня есть код, который читает файл XML. Некоторые атрибуты элементов, которые мне нужно обработать, не являются обязательными. Я пытаюсь использовать вариант [T] для управления ими. Я написал следующее, чтобы изменить тип NodeSeq, возвращаемый оператором узла \ :

class NodeSeqWrapper(nodeSeq: NodeSeq) {
  def textOption: Option[String] = {
    val text = nodeSeq.text
    if (text == null || text.length == 0) None else Some(text)
  }
}
implicit def nodeSeqWrapper(nodeSeq: NodeSeq): NodeSeqWrapper =
  new NodeSeqWrapper(nodeSeq)

, а затем вызвать его так:

(node \ "@attr").textOption.getOrElse("Some default value")

Если узел имеет атрибут "attr", этот код получает его значение. В противном случае возвращается значение «Некоторое значение по умолчанию».

Как я могу это улучшить? Есть ли способ свернуть определение класса в неявный метод? Есть ли лучший способ получить «необязательные» значения атрибутов? Я правильно использую вариант [T] ?

7
задан Ralph 12 October 2011 в 12:17
поделиться