我想将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)
}
目前很难找到一个好的解决方案。
有什么建议吗?
答案 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)
}