Прежде всего: я на 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
для соответствия вместо использования этих хороших литералов? И если: Каков наилучший способ сделать это?