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
类型?
It seems attribute values are of type Seq[Node]
.
scala> <a b="1"/>.attribute("b")
res11: Option[Seq[scala.xml.Node]] = Some(1)
This means you can assign XML as an attribute value.
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>
This seems funky to me. I've never seen XML as attribute values in the real world. Why is it allowed? Why is an attribute value simply not of type String
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
摘自 Burak Emir 的 scala.xml“草稿”一书:
开始引用
end quote
现在我已经在 2.8.0 中尝试过,但它不能完全编译 - 我需要使用
new Atom(42)
。但我可以输入这样的内容:所以这是利用节点属性的部分原理。是的,这有点时髦。
From the scala.xml "draft" book by Burak Emir:
begin quote
end quote
Now I've tried that in 2.8.0 and it doesn't quite compile - I need to use
new Atom(42)
. But I can type something like this:So that was part of the rationale for leveraging nodes for attributes. And yeah it's a bit funky.