首先:我在 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
而不是使用那些漂亮的文字?如果:最好的方法是什么?
最佳答案
处理属性是一种更痛苦的方式,它应该是。这个特殊的例子表明,事实上,Scala 并不像构造它们的方式那样解构 XML,因为这个 语法 对 XML 文字有效。不管怎样,这里有一个方法:
myXML match {
case <a>{b @ <b>{theText}</b>}</a> =>
println("An %s text: %s".format(b \ "@type", theText))
}
关于xml - Scala XML 模式匹配和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2610191/