Scala XML API:为什么允许NodeSeq作为属性值?

看来属性值的类型是Seq[Node]

scala> <a b="1"/>.attribute("b")             
res11: Option[Seq[scala.xml.Node]] = Some(1)

这意味着您可以将XML分配为属性值。

scala> <a b={<z><x/></z>}/>.attribute("b")            
res16: Option[Seq[scala.xml.Node]] = Some(<z><x></x></z>)

scala> <a b={<z><x/></z>}/>.attribute("b").map(_  "x")
res17: Option[scala.xml.NodeSeq] = Some(<x></x>)

scala> new xml.PrettyPrinter(120, 2).format(<a b={<z><x/></z>}/>)
res19: String = <a b="<z><x></x></z>"></a>

这对我来说似乎很时髦。 我从来没有在现实世界中将XML看作属性值。 为什么允许? 为什么属性值不是String类型的?


来自Burak Emir的scala.xml“草稿”一书:

开始报价

乍一看,属性应该只是字符串,而不是别的。 但是,有两个原因允许出现在XML中的相同类型的节点(元素节点除外):数据值和实体引用。

<foo name= "s&uuml;ss" life={Atom(42)}>

结束报价

现在我已经在2.8.0中试过了,它并不完全编译 - 我需要使用new Atom(42) 。 但我可以输入这样的内容:

<foo name={List(Text("s"), EntityRef("uuml"), Text("ss"))}/> 

所以这是利用节点属性的基本原理的一部分。 是的,这有点时髦。

链接地址: http://www.djcxy.com/p/49735.html

上一篇: Scala XML API: Why allow NodeSeq as attribute values?

下一篇: Why is ActiveRecord inserting NULL in the type column of an STI model?