如何将 xml 字符串分成元组?
Posted
技术标签:
【中文标题】如何将 xml 字符串分成元组?【英文标题】:How separate a xml string into tuple? 【发布时间】:2018-02-06 17:59:10 【问题描述】:我想将一个 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】:要处理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)")
对于时间转换,您可以在 *** 中的其他问题 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)
【讨论】:
以上是关于如何将 xml 字符串分成元组?的主要内容,如果未能解决你的问题,请参考以下文章