如何将xml字符串分隔成元组?

时间:2018-02-06 17:59:11

标签: ios swift xml

我想将XML字符串转换为元组。

var responseXml =
"""
<?xml version="1.0"?>
<tmweb>
<booking type='come' time='71102' persnr='9999' name='Test' firstname='Max' title='Mr.'/>
</tmweb>
"""

responseXml.removeFirst(39)                                          // Remove the beginning of the XML
responseXml.removeLast(11)                                           // Remove the end of the XML
responseXml = responseXml.replacingOccurrences(of:" ", with: ";")   // Replace empty place with ;
responseXml = responseXml.replacingOccurrences(of: "'", with: "\"")    // Replace ' to "
responseXml = responseXml.replacingOccurrences(of: "=", with: ": ")    // Replace = to :(space)

临时输出:

"type: "come";time: "71102";persnr: "9999";name: "Test";firstname: "Max";title: "Mr."\n"

目前我只有整个字符串和替换作为UIAlert

我的下一步:

我想将秒数(71102)转换为可读时间格式,如19:45:22

func secs2time (_ seconds : Int) -> (Int,Int,Int) {
    return (seconds / 3600, (seconds % 3600) / 60, (seconds % 3600) % 60)
}

目前很难找到一个好的解决方案。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

要处理xml,您需要使用NSXMLParser。这里有两个可以帮助你的网站。

http://leaks.wanari.com/2016/08/24/xml-parsing-swift/ https://medium.com/@lucascerro/understanding-nsxmlparser-in-swift-xcode-6-3-1-7c96ff6c65bc

这是一个小例子:

var url = NSURL(string: "http://example.com/website-with-xml")
var xmlParser = NSXMLParser(contentsOfURL: url)
xmlParser.delegate = self
xmlParser.parse()

func parser(parser: NSXMLParser!, didStartElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!, attributes attributeDict: NSDictionary!) {
   println("Element's name is \(elementName)")
   println("Element's attributes are \(attributeDict)")
}

对于时间转换,您可以在Stackoverflow中的其他问题here找到它:

  

定义

func secondsToHoursMinutesSeconds (seconds : Int) -> (Int, Int, Int) {
  return (seconds / 3600, (seconds % 3600) / 60, (seconds % 3600) % 60)
}
  

使用

     

secondsToHoursMinutesSeconds(27005)       (7,30,5)

     

let (h,m,s) = secondsToHoursMinutesSeconds(27005)
  

上面的函数使用Swift元组返回三个值   一旦。您可以使用let (var, ...)语法对元组进行解构   如果需要,可以访问单个元组成员。

     

如果您确实需要使用Hours等单词打印出来,那么   使用这样的东西:

func printSecondsToHoursMinutesSeconds (seconds:Int) -> () {
  let (h, m, s) = secondsToHoursMinutesSeconds (seconds)
  print ("\(h) Hours, \(m) Minutes, \(s) Seconds")
}
  

请注意secondsToHoursMinutesSeconds()的上述实现   适用于Int个参数。如果您需要Double版本,则需要   决定返回值是什么 - 可以是(Int, Int, Double)   或者可能是(Double, Double, Double)。你可以尝试类似的东西:

func secondsToHoursMinutesSeconds (seconds : Double) -> (Double, Double, Double) {
  let (hr,  minf) = modf (seconds / 3600)
  let (min, secf) = modf (60 * minf)
  return (hr, min, 60 * secf)
}