首先:我在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
而不是使用那些不错的文字?如果:最好的方法是什么?
答案 0 :(得分:17)
处理属性更应该是一种痛苦。事实上,这个特殊的例子表明,Scala不会像构造它那样解构XML 语法 对XML文字有效。无论如何,这是一种方式:
myXML match {
case <a>{b @ <b>{theText}</b>}</a> =>
println("An %s text: %s".format(b \ "@type", theText))
}