Xml属性渲染奇怪

时间:2012-01-19 10:42:07

标签: scala

使用2.9.0.1

<b time={None}>Hello</b>

=&GT;

<b >Hello</b>

即。起始标签中的b后面有一个空格。 从XML的角度来看,这没有任何意义。

这个“功能”应该发生吗?

感谢。

2 个答案:

答案 0 :(得分:3)

这是因为scala.xml.Elem的toString实现更具体 在对象scala.xml.MetaInf方法buildString中,如下所示:

 def buildString(sb: StringBuilder): StringBuilder = {
  sb.append(' ')
  toString1(sb)
  next.buildString(sb)
 }

所以它首先在元素的字符串表示中添加了一个空格,并且只有在它附加了下一个属性之后,所以如果一个属性作为类成员存在但没有任何字符串表示,你最终会得到一个额外的空格在关闭括号之前

答案 1 :(得分:1)

实际上,这是允许的。见Extensible Markup Language (XML) 1.0 (Fifth Edition), 3.1 Start-Tags, End-Tags, and Empty-Element Tags。从那里:

STag ::= '<' Name (S Attribute)* S? '>'

其中S是空格,Attribute是属性定义。最终元素也是如此:

ETag ::= '</' Name S? '>'

所以这是允许的。是否是你想要的是另一回事: - )