【问题标题】:Scala XML Marshaling using combinator from Scala GDataScala XML 编组使用来自 Scala GData 的组合器
【发布时间】:2011-10-01 16:20:16
【问题描述】:

这个问题与 thread 有关使用 XML 组合器有关,该组合器是 Google 的 Scala gdata 客户端库的一部分,发现 here

  1. 在发布的代码中,没有 elem("segment"...) 的参数这不会导致编译器抱怨“找不到参数 ns 的隐式值:(String, String) "

  2. 如何在每个标签不添加名称空间前缀的情况下生成 XML 元素。例如,我生成的代码如下:

    <yt:entry xmlns:yt="http://gdata.youtube.com/schemas/2007">
        <yt:title type="TextType">MyTitle</yt:title>
        <yt:summary>My Summary</yt:summary>
    </yt:entry>
    

但我不希望每个标签都有命名空间前缀!!如何使用组合器生成这样的 XML。

这是我的pickler的样子:

def pickler: Pickler[YtPlaylist] = {
    (wrap (elem("entry",
           elem("title", text ~ attr("type", text))
           ~ elem("summary", text))(Uris.ytNs))
          (YtPlaylist.apply)
          ({p => new ~(p.title, p.titleType) ~ p.summary}))
}

case class YtPlaylist(title: String, titleType: String, summary: String)

我在网上找到的示例没有指定命名空间,但没有它我总是会出现编译错误。如何生成没有命名空间的 XML 元素??

【问题讨论】:

    标签: scala xml-serialization


    【解决方案1】:

    是的,您需要定义一个命名空间。使用null 前缀定义默认命名空间:

    implicit val ns = (null: String, "http://gdata.youtube.com/schemas/2007")
    

    【讨论】:

    • 谢谢。它正是我想要的。关于我的下一个问题,如何创建具有多个命名空间的元素?
    • 您可以通过投票和接受我的答案来感谢我(答案旁边有复选标记)。 :-) 我建议单独发布您的其他问题。
    • 如果可以的话,我会支持并接受,但这需要我先获得 15 声望。
    • @YManYen 不用担心。 :) 我还没有看到你发布的其他问题——你知道了吗?
    • 感谢您的提问。我终于弄明白了。
    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2014-04-15
    • 2017-03-19
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 2020-01-17
    相关资源
    最近更新 更多