Scala中XML节点的属性值

时间:2015-05-11 16:20:47

标签: xml scala

假设我正在编写一个函数function roundToSignificantFigures(num, n) { if(num === 0) { return 0; } var d = Math.ceil(Math.log10(num < 0 ? -num: num)); var power = n - parseInt(d); var magnitude = Math.pow(10, power); var shifted = Math.round(num*magnitude); alert(shifted/magnitude); return shifted/magnitude; 来从给定节点获取属性名称的属性值。

(Node, String) => Option[String]

有意义吗?你会如何修复/改进它?

1 个答案:

答案 0 :(得分:2)

Scala在Node类上定义了方法attribute,但它们会返回Option[Seq[Node]],这需要进一步处理以获得String

所以我目前在我的代码中使用的东西非常相似:

implicit class XmlEnhancements(node: Node) {
  def attributeOpt(attribute: String): Option[String] =
    node.attribute(attribute) flatMap (_.headOption) map (_.text)
}

此外,由于Scala本身在xml.Node类上定义了方法def \@(attributeName: String): String,我相信在attributeOpt别名下定义\@?也是可以的:

implicit class XmlEnhancements(node: Node) {
  def \@?(attribute: String): Option[String] =
    node \@ attribute match {
      case "" => None
      case s => Some(s)
    }
}