【问题标题】:Parsing XML documents iOS解析 XML 文档 iOS
【发布时间】:2014-03-14 20:59:30
【问题描述】:

我必须解析这个文档,我打算使用 NSXMLparser,但唯一的问题是我不知道如何获取我想要的信息。我不知道如何浏览每个标签,我看过一些简单的例子,但是当我尝试使用他们的方法时,我会得到我不想要的随机标签和信息。有人可以解释如何从复杂的 XML 结构(例如这个结构)中获取某些信息吗? 谢谢!

 <kml xmlns:ns3="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:ns2="http://www.w3.org/2005/Atom"
    xmlns="http://www.opengis.net/kml/2.2">
    <Document>
            <description>Available CAR2GO Vehicles</description>
            <Style id="car2go">
                    <IconStyle>
                            <Icon>
                                    <href>http://www.car2go.com/common/images/openapi/marker_car2go.png
                                    </href>
                            </Icon>
                            <hotSpot y="0.0" x="0.0" />
                    </IconStyle>
            </Style>
            <Style id="car2go_ed">
                    <IconStyle>
                            <Icon>
                                    <href>http://www.car2go.com/common/images/openapi/marker_car2go_ed.png
                                    </href>
                            </Icon>
                            <hotSpot y="0.0" x="0.0" />
                    </IconStyle>
            </Style>
            <Placemark>
                    <name>UL-C5887</name>
                    <description>Sudetenweg, 89075 Ulm<br/>Fuel
                            24<br/>Interior GOOD<br/>Exterior GOOD
                    </description>
                    <styleUrl>#car2go_ed</styleUrl>
                    <ExtendedData>
                            <Data name="fuel">
                                    <value>24</value>
                            </Data>
                            <Data name="interior">
                                    <value>GOOD</value>
                            </Data>
                            <Data name="exterior">
                                    <value>GOOD</value>
                            </Data>
                            <Data name="vin">
                                    <value>WME4513001K154655</value>
                            </Data>
                            <Data name="engineType">
                                    <value>ED</value>
                            </Data>
                            <Data name="charging">
                                    <value>true</value>
                            </Data>
                    </ExtendedData>
                    <Point>
                            <coordinates>10.029,48.4362,0</coordinates>
                    </Point>
            </Placemark>
            <Placemark>
                    <name>UL-C5889</name>
                    <description>Heilmeyersteige, 89075 Ulm<br/>Fuel
                            58<br/>Interior GOOD<br/>Exterior GOOD
                    </description>
                    <styleUrl>#car2go</styleUrl>
                    <ExtendedData>
                            <Data name="fuel">
                                    <value>58</value>
                            </Data>
                            <Data name="interior">
                                    <value>GOOD</value>
                            </Data>
                            <Data name="exterior">
                                    <value>GOOD</value>
                            </Data>
                            <Data name="vin">
                                    <value>WME4513001K154655</value>
                            </Data>
                            <Data name="engineType">
                                    <value>CE</value>
                            </Data>
                    </ExtendedData>
                    <Point>
                            <coordinates>9.947235,48.410497,0</coordinates>
                    </Point>
            </Placemark>
    </Document>

【问题讨论】:

    标签: ios objective-c xml parsing nsxmlparser


    【解决方案1】:

    我得到了我不想要的随机标签和信息

    使用NSXMLParser,您无需浏览 XML。相反,您为解析器创建一个委托,该委托在解析器每次遇到某些东西时获取消息——标签、值等。您的委托需要注意它感兴趣的标签和值,并为您的应用程序做任何有意义的事情当那些到达时。因此,您看到的标签不是随机的,它们只是您正在解析的文件中的标签,它们按照它们在文件中出现的顺序排列。

    有人能解释一下如何从一个复杂的 XML 结构中获取某些信息吗?

    通常,您的解析器委托有点像一个状态机,它跟踪它正在解析的标签、它看到的数据等。这可能超出您的预期,在这种情况下您可能想要查看除 NSXMLParser 之外的其他 XML 解析选项。 TouchXML 是一个很受欢迎的库,因为它会为您解析文件,然后让您使用 Xquery 查看数据。

    【讨论】:

      【解决方案2】:

      我强烈建议您不要重新发明轮子并使用高级 3rd 方库,这将使您的生活更轻松。 AFNetworking 的 @mattt 有一个出色的 XML 解析库,名为 Ono

      【讨论】:

        【解决方案3】:

        我建议您在此处查看 Apple 自己的示例代码所展示的策略:

        https://developer.apple.com/library/ios/samplecode/SeismicXML/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007323

        实际的解析代码在这里:

        https://developer.apple.com/library/ios/samplecode/SeismicXML/Listings/SeismicXML_APLParseOperation_m.html#//apple_ref/doc/uid/DTS40007323-SeismicXML_APLParseOperation_m-DontLinkElementID_11

        所有工作都由解析器的委托(也就是这个对象,self)完成。请特别注意didStartElement:... 如何根据刚刚遇到的元素类型做出选择。

        我还应该提到,还有另一种策略,在这种策略中,不是委托人做出这些选择,而是不断地将解析器重新指向不同的委托人。在这里,我开发了该策略的通用版本,并展示了如何使其适应特定的解析情况:http://www.apeth.com/iOSBook/ch36.html#_xml

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-10
          • 1970-01-01
          • 2016-05-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-24
          • 1970-01-01
          相关资源
          最近更新 更多