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

问题描述:

我该如何在Scala XML中创建这个最底层的HTML5: <!DOCTYPE html><title></title><p></p></html>将DOCTYPE添加到Scala XML的最简单方法是什么?

当然它的简单,使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> 

这是接近,但不是一个前缀属性和一个顽皮的分配。

您可以使用带有java.io.Writer而不是File的XML写入方法。使用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 
+0

希望有一个不那么牵扯的方式,但是四条线对于正在做的事情并不多。 – Noel 2011-03-31 19:44:06

可以DOCTYPE标签不添加到Scala的XML结构,但是当你把它变成一个字符串,你可以把它注射。