Прежде всего: я нахожусь в Scala 2.8
У меня есть небольшая проблема при использовании сопоставления шаблонов на элементах XML. Я знаю, что могу сделать что-то вроде этого:
val myXML = <a><b>My Text</b></a>
myXML match {
case <a><b>{theText}</b></a> => println(theText)
case _ =>
}
Вот такой пример, который я нахожу везде в сети и в обеих моих книгах Scala. Но что, если я хочу сопоставить элемент XML в зависимости от атрибута?
val myXML = <a><b type="awesome">An awesome Text!</b></a>
myXML match {
case <a><b type={textType}>{theText}</b><a> => println("An %s text: %s".format(textType, theText))
case _ =>
}
Компилятор будет бросать мне error: in XML literal: '>' expected instead of 't'
, указывая, что я не могу использовать атрибуты, потому что компилятор ожидал, что тег элемента будет закрыт. Если я попытаюсь сопоставить элемент XML с фиксированным атрибутом, без фигурных скобок, возникает такая же ошибка.
Итак, мой вопрос прост: как я могу сделать такое совпадение? Должен ли я создавать Elem
для матча вместо использования этих хороших литералов? И если: Каков наилучший способ сделать это?