当值为 null 时 Scala Xml 自动瞬态

发布于 2024-12-19 04:37:10 字数 509 浏览 2 评论 0原文

我知道用 pojo 生成 xml 我可以做这样的事情,

    class Person(name : String, age : Int){
        def toXml() = <person><name>{ name }</name><age>{ age }</age></person>;
    }

问题是,如果 name = null,我会

    <person><name></name><age>8</age></person>

真的,我希望节点在值为 null 时是瞬态的

    <person><age>8</age></person>

有没有一种干净的方法来完成此操作?谢谢。

I know to generate xml with pojo I can do something like this,

    class Person(name : String, age : Int){
        def toXml() = <person><name>{ name }</name><age>{ age }</age></person>;
    }

The problem is that if name = null, the I would have

    <person><name></name><age>8</age></person>

when really, I want the node to be transient when the value is null

    <person><age>8</age></person>

Is there a clean way to accomplish this? thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一向肩并 2024-12-26 04:37:10

以下代码对我有用。

<person>{if(name != "")  <name>{name}</name>}</person>

干杯

The following code works for me.

<person>{if(name != "")  <name>{name}</name>}</person>

Cheers

£烟消云散 2024-12-26 04:37:10

如果 name 可以为 null,另一种(更实用?)方法是使用 Option:

class Person(name : Option[String], age : Int){
  def toXml() = <person>{name map {x=> <name>{x}</name>} getOrElse(<name/>)} <age>{ age }</age></person>;
}

我很确定它可以变得不那么冗长,但优点是您指定 name 是可选的,然后类型检查器将强制来处理这个问题。
对于普通字符串,您需要自己记住空检查。

If name can be null, another (more functional?) approach is to use Option:

class Person(name : Option[String], age : Int){
  def toXml() = <person>{name map {x=> <name>{x}</name>} getOrElse(<name/>)} <age>{ age }</age></person>;
}

I'm pretty sure it can be made less verbose, but the advantage is that you're specifying that name is optional and then the type checker will force to deal with that.
With a plain String you need to remember the null check by yourself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文