xml - Scala XML 模式匹配和属性

标签 xml scala pattern-matching

首先:我在 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/

相关文章:

scala - 从相同特征派生的案例类的模式匹配

php - 正则表达式 PHP,将所有链接与特定文本匹配

java - 使用 JAXB&MOXy 将 JPA 实体转换为 XML 并再次转换回来

xml - 浏览器是否允许以任何顺序呈现 <li>?

xml - 如何在不在 E4X 中循环的情况下将属性添加到 XMLLIST

java - 使用 java -jar 运行 scala 应用程序

java - PySpark 是否调用 java api,然后 java api 调用 Apache Spark 中的 scala api?

python - 如何使用正则表达式删除python字符串中的特定模式?

python - 如何使用带有多个百分比 (%) 符号的 PostgreSQL 和 Python 类似模式匹配?

java - 在 ListView 中选择项目,然后使用 toast 在单击时显示自定义消息(针对每个项目)