ScalaXML and empty lines



我刚刚开始使用scala,并且在将我的域对象(case class)表示为格式良好的XML时遇到问题。我有以下隐式转换器:

implicit def identifierToXml(ident : Identifier): Elem =
    <identifier>
        { if(ident.use != null) <use value={ident.use}/> }
        { if(ident.label != null) <label value={ident.label}/> }
        { if(ident.system != null) <system value={ident.system}/> }
        { if(ident.value != null) <value value={ident.value}/> }
        { if(ident.period != null) <period>{ident.period}</period> }
        { if(ident.assigner != null) <assigner>{ident.assigner}</assigner> }
    </identifier>

它工作得很好,除了它在缺失值上注入空行的事实。例如,Identifier(system = "test")结果是:

<identifier>

    <system value="test"/>

</identifier>

我知道我可以使用scala.xml.Utility.trim(...)来隐蔽成一个完全修剪的表示(<identifier><system value="test"/></identifier>),但宁愿保留格式,除了空行。

我怎样才能以惯用的方式实现这一目标?如果我要使用 scala.xml.Utility.trim(...) ,有没有一种好方法将其添加到我的隐式转换器中?

铌。另外,如果有更好的方法来处理object <-> xml表示之间的这种转换,我很想听听建议:)

问题只是在构造 XML 文本时,每个新行都转换为 XML 新行。 如果您关心的只是查看此内容并将其转换为字符串,则可以使用 scala.xml.PrettyPrinter

val printer = new PrettyPrinter(100, 2)
printer.format(myDiv)

如果你想从该字符串中获取一个元素,你可以使用 loadString

XML.loadString(printer.format(myDiv))

但是你可能只使用scala.xml.Utility.trim,就像你说的,然后用PrettyPrint打印它。 如果对象适合您的结构,您甚至可以覆盖对象的toString

最新更新