如何将 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 字符串分成元组?的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串的所有排列作为字符串列表(而不是元组列表)?

如何将经纬度坐标字符串分成两列?

正则表达式 - 如何将此字符串分成两部分

如何将字符串中的值分成数组

Cpp:将字符串片段解析为元组

如何将 XML 文档分成三份(或者,甚至更好,分成 n 份)?