0

我第一次尝试解析 XML 文件,我正在使用 SWXMLHash。

我的xml文件是:

<weatherdata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://api.met.no/weatherapi/locationforecast/1.9/schema" created="2018-02-13T18:12:31Z">
    <meta>
        <model name="LOCAL" termin="2018-02-13T12:00:00Z" runended="2018-02-13T14:27:32Z" nextrun="2018-02-13T22:00:00Z" from="2018-02-13T19:00:00Z" to="2018-02-16T06:00:00Z" />
        <model name="EPS" termin="2018-02-13T00:00:00Z" runended="2018-02-13T09:03:05Z" nextrun="2018-02-13T22:00:00Z" from="2018-02-16T12:00:00Z" to="2018-02-22T18:00:00Z" />
    </meta>
    <product class="pointData">
        <time datatype="forecast" from="2018-02-13T19:00:00Z" to="2018-02-13T19:00:00Z">
            <location altitude="0" latitude="" longitude="">
                <temperature id="TTT" unit="celsius" value="3.5"/>
                <windDirection id="dd" deg="158.8" name="S"/>
                <windSpeed id="ff" mps="8.8" beaufort="5" name="Frisk bris"/>
                <windGust id="ff_gust" mps="15.0"/>
                <areaMaxWindSpeed mps="13.8"/>
                <humidity value="82.1" unit="percent"/>
                <pressure id="pr" unit="hPa" value="1002.5"/>
                <cloudiness id="NN" percent="99.3"/>
                <fog id="FOG" percent="0.0"/>
                <lowClouds id="LOW" percent="73.2"/>
                <mediumClouds id="MEDIUM" percent="0.0"/>
                <highClouds id="HIGH" percent="91.0"/>
                <dewpointTemperature id="TD" unit="celsius" value="0.6"/>
            </location>
        </time>

<time> </time>重复。

做了一个let parsedResultXML = SWXMLHash.parse(data)

我正在尝试使用 for in 循环解析

for node in parsedResultXML["weatherdata"]["product"]["time"].all{
    print(node)
}

我得到结果

<time to="2018-02-14T01:00:00Z" from="2018-02-14T01:00:00Z" datatype="forecast">
         <location latitude="" longitude="" altitude="0">
            <temperature id="TTT" unit="celsius" value="3.4"></temperature>
            <windDirection id="dd" name="S" deg="158.7"></windDirection>
            <windSpeed name="Liten kuling" mps="11.1" id="ff" beaufort="6"></windSpeed>
            <windGust id="ff_gust" mps="19.0"></windGust>
            <areaMaxWindSpeed mps="17.5"></areaMaxWindSpeed>
            <humidity unit="percent" value="88.3"></humidity>
            <pressure id="pr" unit="hPa" value="1002.5"></pressure>
            <cloudiness id="NN" percent="99.3"></cloudiness>
            <fog id="FOG" percent="0.1"></fog>
            <lowClouds id="LOW" percent="98.6"></lowClouds>
            <mediumClouds id="MEDIUM" percent="93.4"></mediumClouds>
            <highClouds id="HIGH" percent="57.8"></highClouds>
            <dewpointTemperature id="TD" unit="celsius" value="1.5"></dewpointTemperature>
         </location>
      </time>

但我无法访问这些元素。

使用

for node in parsedResultXML["weatherdata"]["product"]["time"].all{
    node["time"].element?.attribute(by: "from")?.text 
}

我没有得到任何结果。

任何想法??

谢谢

4

1 回答 1

0

你很接近......正如@rmaddy评论的那样,node已经被索引到“时间”。所以而不是:

for node in parsedResultXML["weatherdata"]["product"]["time"].all {
    node["time"].element?.attribute(by: "from")?.text 
}

改为这样做:

for node in parsedResultXML["weatherdata"]["product"]["time"].all {
    node.element?.attribute(by: "from")?.text 
}
于 2018-02-14T18:37:04.067 回答