菜鸟教程小白 发表于 2022-12-13 16:21:40

iphone - 如何使用 NSXMLParser 解析多个 XML 标签


                                            <p><p>我正在解析一个 XML 文件并填充一个表格 View 。 XML 的格式如下:</p>

<pre><code>&lt;article&gt;
&lt;title&gt;Title 1&lt;/title&gt;
&lt;last-modified&gt;MM/DD/YYY&lt;/last-modified&gt;
&lt;/article&gt;
...
</code></pre>

<p>我目前使用 <code>NSMutableString</code> 收集所有文章标题并将字符串附加到 <code>- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString * )string</code> 方法。然后在适当的时候,我将 <code>articleTitle</code> 添加到包含所有文章标题的 <code>NSMutableArray</code> 中,并按照您的预期从数组中填充表格。</p>

<p>但是,现在我想切换到使用具有副标题的表格 View 单元格(我想将最后修改日期作为 <code>detailTextLabel</code> 并将标题作为 <code>textLabel</code>)。通过将解析分成几个方法(即 2 个 <code>parser</code> 方法和 <code>foundCharacters</code> 方法)的方式,我不确定应该如何“收集”数据,并根据该数据填充表格。</p>

<p>最好的方法是什么?我可以以某种方式填写 NSDictionary 或其他内容,然后在构建表格单元格时按键检索项目吗?</p>

<p>我似乎想不出解决这个问题的最佳方法。</p>

<p>提前致谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果你愿意,你可以使用 DOM 解析器,它可能会让你的生活更轻松,但如果出于某种原因你想坚持使用 NSXMLParser,请继续阅读。</p>

<p>你希望你给解析器的对象作为你的委托(delegate)(实现 NSXMLParserDelegate 的东西)基本上在传递数据时积累数据。</p>

<p>经常被忽视的重要细节:对于各种标签的“内容”,您实际上可以收到对 <code>parser:foundCharacters:</code> 的多次调用。绝对没有要求解析器一次将所有内容交给您。如果它愿意,它可以一次向您发送一个字符,而您必须妥善处理它。</p>

<p>以下假设有以下 ivars:</p>

<pre><code>NSMutableArray articles_;
NSMutableString currentCharacters_;
Article currentArticle_; // Article has title and lastModified properties.
</code></pre>

<p>下面是委托(delegate)如何实现一些相关消息的示例(以下代码显然没有错误处理):</p>

<pre><code>- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
    if () {
      NSAssert(currentArticle_ == nil, @&#34;Uh oh! Bad XML!&#34;);
      currentArticle_ = [ init];
      return;
    }
    if () {
      NSAssert(currentCharacters_ == nil, @&#34;Uh oh! Bad XML!&#34;);
      currentCharacters_ = [ init];
      return;
    }
    if () {
      NSAssert(currentCharacters_ == nil, @&#34;Uh oh! Bad XML!&#34;);
      currentCharacters_ = [ init];
      return;
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if () {
      ;
      , currentArticle_ = nil;
      return;
    }
    if () {
      currentArticle_.title = currentCharacters_;
      , currentCharacters_ = nil;
      return;
    }
    if () {
      ;
      , currentCharacters_ = nil;
      return;
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    ;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 如何使用 NSXMLParser 解析多个 XML 标签,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/4119086/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/4119086/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 如何使用 NSXMLParser 解析多个 XML 标签