将DOCTYPE添加到Scala XML的最简单方法?

时间:2011-03-30 19:14:10

标签: xml html5 scala

如何在Scala XML中创建这个miminal HTML5: <!DOCTYPE html><title></title><p></p></html>

当然,在Scala中制作类似HTML的XML很简单:

> val html = <html><title></title><p></p></html>
html: scala.xml.Elem = <html><title></title><p></p></html>

但是,如何在DOCTYPE代码中注入html属性作为前缀?

我尝试了两条路线:
使用scala.xml.Documentscala.xml.DocType,但两者似乎都基于写出文件或流,而我只是将这个XML对象保留在内存中。看起来像太多的仪式。

使用Attribute

> import scala.xml.{Null, Text, Attribute}
> val d = <html /> % Attribute(None, "!DOCTYPE", Text(""), Null)
d: scala.xml.Elem = <html !DOCTYPE=""></html>

这是关闭的,但不是带有前缀的属性和顽皮的任务。

2 个答案:

答案 0 :(得分:4)

您可以使用XML的write方法来获取java.io.Writer而不是File。使用java.io.StringWriter是直截了当的:

val w = new java.io.StringWriter()
val html = <html><body><p>Que pasa?!</p></body></html>
xml.XML.write(w, html, "UTF-8", xmlDecl = false, doctype = 
   xml.dtd.DocType("html", xml.dtd.SystemID("about:legacy-compat"), Nil))
w.toString

答案 1 :(得分:0)

您无法将doctype标记添加到scala xml结构中,但是当您将其转换为字符串时可以将其注入。