You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:12:04