xml - 从 XML 响应 Swift 中获取值(value)

标签 xml swift swxmlhash

我正在使用位于 Here 的 Swift xml 解析器库。我希望从下面的 XML 中获取具有特定值的特定值。

下面的 XML 显示了设备上安装的应用程序列表,然后列出了有关每个应用程序的信息;例如版本和应用程序大小。每个<deviceSw>是设备上的不同应用程序。我希望从中获取版本值 com.fibrelink.browser 应用程序。旁注是,我不能只在设备上获取第二个应用程序,因为某些设备可能将 com.opticallink.browser 列为第三个应用程序或第四个应用程序。有没有办法对 XML 中的 com.opticallink.browser 值进行排序,然后获取它的版本值?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<deviceSoftwares>
    <deviceSw>
        <swAttrs>
            <key>Application ID</key>
            <type>string</type>
            <value>com.fiberlink.maas360forios</value>
        </swAttrs>
        <swAttrs>
            <key>Version</key>
            <type>string</type>
            <value>2.40.60</value>
        </swAttrs>
        <swAttrs>
            <key>AppDataSize</key>
            <type>string</type>
            <value>2.09</value>
        </swAttrs>
    </deviceSw>
    <deviceSw>
        <swAttrs>
            <key>Application ID</key>
            <type>string</type>
            <value>com.fiberlink.browser</value>
        </swAttrs>
        <swAttrs>
            <key>Version</key>
            <type>string</type>
            <value>1.30.45</value>
        </swAttrs>
        <swAttrs>
            <key>AppDataSize</key>
            <type>string</type>
            <value>0.51</value>
        </swAttrs>
    </deviceSw>

编辑:

我尝试了下面的代码来循环遍历键,并且可能执行逻辑来排序,但它返回 nil 值。

for elem in xml["deviceSoftwares"]["deviceSw"].all {
    print(elem["swAttrs"]["key"].element!.text!)
}

编辑2:

我将代码更改为以下内容:

for elem in xml["deviceSoftwares"]["deviceSw"]["swAttrs"].all {
    print(elem["key"].element!.text)
}

什么也没有打印出来,它只是一个空白的输出窗口。

最佳答案

使用搜索谓词可以相当简洁地完成这种操作:

// This assumes the attributes within each <deviceSw> tag are always ordered the same way
// (Application ID, Version, AppDataSize)
func getVersion(appId: String) -> String? {
    let softwares = xml["deviceSoftwares"]["deviceSw"]
    if let index = softwares.index(where: { $0["swAttrs"][0]["value"].element?.text == appId }) {
        return softwares[index]["swAttrs"][1]["value"].element?.text
    } else {
        return nil
    }
}

用法(假设 xml: XMLIndexer 位于全局范围内):

let version = getVersion(appId: "com.fiberlink.browser")

关于xml - 从 XML 响应 Swift 中获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45123892/

相关文章:

python - 从解析的 XML 文件中配对子元素和嵌套子元素的值

java - 向 JAX-B 生成的元素添加静态属性

swift - 如何以操作的形式更改 ViewController 之间的数据?

swift - 我在 XCode 上重构 Storyboard时丢失了一些工作?我能做些什么?

swift - drmohundro/SWXMLHash 和 Swift 中的转义值

swift - SWXMLHash 解析数据对象

c# - 根据KeyWord从XML中提取一个节点

java - ANT xml 属性 : demux properties with multiple values

ios - (setValue :) Cannot store object of type _SwiftValue at pictureURL. 只能存储NSNumber, NSString, NSDictionary, and NSArray类型的对象

ios - 如何检查解析的rss变量是否包含swift 2中的确切元素