1

对于我正在使用的服务,大多数响应都是 XML 格式的,但也有一些是纯文本。设置它的最佳方法是什么?

目前我有这个:

// Root should return plain text, don't try to transform it
configureTransformer("/") { (content: String, entity) -> String? in
  return content
}
// Most data is XML
configureTransformer("**") { (content: NSData, entity) -> NSXMLDocument? in
  return try? NSXMLDocument(data: content, options: 0)
}
configureTransformer("**/properties/*") {
  (content: NSData, entity) -> String? in
  return String(data: content, encoding: NSUTF8StringEncoding)
}

..但是当我查询纯文本的根 URL 时,我收到一个错误,因为无法应用 NSData -> NSXMLDocument 转换器。

编辑:也许我真正想要的是在内容类型为 application/xml 时应用 XML 转换器。有没有办法做到这一点?

4

1 回答 1

1

根据我在 中看到的Service.init(),我这样做了,而且效果很好:

func XMLResponseTransformer(
    transformErrors: Bool = true) -> Siesta.ResponseTransformer
{
  return Siesta.ResponseContentTransformer(transformErrors: transformErrors) {
    (content: NSData, entity: Siesta.Entity) throws -> NSXMLDocument in
    return try NSXMLDocument(data: content, options: 0)
  }
}

configure(description: "xml") {
  $0.config.pipeline[.parsing].add(XMLResponseTransformer(),
                                   contentTypes: [ "*/xml" ])
}
于 2016-07-21T20:28:19.137 回答