SWXMLHash使用问题:无法筛选指定ICAO值的XML数据
解决SWXMLHash筛选与数据访问问题
你的问题出在filterAll的判断逻辑上:你直接拿elem.text对比,但elem是<AptInfo>元素本身,它的文本内容是空的,你需要检查的是<AptInfo>下的<ICAO>子元素的文本值。
修正后的筛选代码
let xml = XMLHash.parse(strAirp as String) // 筛选ICAO为"07FA"的<AptInfo>记录 let filteredAptInfos = xml["AirportDatabase"]["AptInfo"].filterAll { elem, _ in elem["ICAO"].text == "07FA" }
访问目标数据
因为filterAll返回的是所有匹配的索引器集合,而ICAO通常是唯一的,你可以取第一个匹配项,再导航到<LandingRwyInfo>和<RunwayID>:
// 安全获取第一个匹配的记录,避免空值崩溃 if let targetAptInfo = filteredAptInfos.first { // 访问RunwayID的文本值 if let runwayID = targetAptInfo["LandingRwyInfo"]["RunwayID"].text { print("找到跑道ID:\(runwayID)") } else { print("未找到RunwayID数据") } } else { print("未找到ICAO为07FA的机场记录") }
补充说明
如果你的XML结构中,<LandingRwyInfo>是数组(比如一个机场有多条跑道),需要用all遍历所有跑道记录:
// 遍历所有跑道信息 targetAptInfo["LandingRwyInfo"].all.forEach { rwyInfo in if let id = rwyInfo["RunwayID"].text { print("跑道ID:\(id)") } }
内容的提问来源于stack exchange,提问作者hgiraud
相关产品推荐
相关产品推荐

