简体   繁体   English

SWXMLHash无法解析[XMLIndexer]

[英]SWXMLHash can't parse a [XMLIndexer]

I am trying for first time to parse a XML file and I am using SWXMLHash. 我正在尝试第一次解析XML文件,并且正在使用SWXMLHash。

My xml file is: 我的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>

The <time> </time> repeates. <time> </time>重复。

Having made a let parsedResultXML = SWXMLHash.parse(data) let parsedResultXML = SWXMLHash.parse(data)

I am trying to parse with a for in loop 我正在尝试使用for循环解析

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

I get results 我得到结果

<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>

But I can't access the elements. 但是我无法访问这些元素。

Using 使用

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

I don't get any results back. 我没有得到任何结果。

Any idea?? 任何想法??

Thanks 谢谢

You're close... as @rmaddy commented, node is already indexed to "time". 您正在关闭...正如@rmaddy所评论的那样,该node已被索引为“时间”。 So instead of: 所以代替:

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

Do this instead: 改为这样做:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM