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

Noe*_*oel 5 xml html5 scala

如何在Scala XML中制作这种最小的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>
Run Code Online (Sandbox Code Playgroud)

但是,如何注入标记中带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>
Run Code Online (Sandbox Code Playgroud)

这是封闭的,但不是前缀属性,并且具有顽皮的分配。

0__*_*0__ 5

您可以使用 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
Run Code Online (Sandbox Code Playgroud)