菜鸟教程小白 发表于 2022-12-13 11:10:04

objective-c - 使用 NSXMLParser 问题解析


                                            <p>我正在尝试解析来自 Web 服务器的响应。<br><br>我的解析器如下:<br><pre><code>#import &#34;XMLParser.h&#34;
#import &#34;AppDelegate.h&#34;
#import &#34;Child.h&#34;

@implementation XMLParser

- (XMLParser *) initXMLParser {

   self = ;

    if(self)
    {
      appDelegate = (AppDelegate *)[ delegate];
    }
    return self;
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict
{
    if()
    {
      // initialize the array
      if(!appDelegate.children)
      {
            appDelegate.children = [ init];

      }

    }

    else if()
    {
      if(!aChild)
      {
      //Initialize the child.
            aChild = [ init];
      }
    }

    NSLog(@&#34;Processing Element: %@&#34;, elementName);
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

    if(!currentElementValue)
    {
      currentElementValue = [ initWithString:string];
    }
    else
    {
      ;
    }

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    //NSLog(@&#34;El name: %@&#34;, elementName);

    if()

      NSLog(@&#34;end of xml&#34;);
      return;   

    if()
    {
      NSLog(@&#34;Found end of child&#34;);

      ;

      aChild = nil;
    }

    else if()
    {
      NSLog(@&#34;Found key&#34;);
    }

    else if()
    {
      NSLog(@&#34;Found checkedIn&#34;);
    }

    else if()
    {
      NSLog(@&#34;Found firstname&#34;);
    }

    else if()
    {
      NSLog(@&#34;found gender&#34;);
    }

    else if()
    {
      NSLog(@&#34;found id&#34;);
    }

    else if()
    {
      NSLog(@&#34;found isontour&#34;);

    }

    else if()
    {
      NSLog(@&#34;found lastname&#34;);
    }

    else if()
    {
      NSLog(@&#34;found groupname&#34;);
    }

    currentElementValue = nil;

}
@end
</code></pre><br>现在我只是想看看它是否找到了数据......然后我会保存它......<br>但是在我的 didEndElement 中,除了<br><pre><code>if()
</code></pre><br>我的 xml 响应示例:<br><pre><code>            &lt;a:KeyValueOfintKidf4KEWLbb&gt;
            &lt;a:Key&gt;XXXXXXXX&lt;/a:Key&gt;
            &lt;a:Value xmlns:b=&#34;http://schemas.datacontract.org/2004/07/DayCare.DB.DTO&#34;&gt;
                &lt;b:CheckedIn&gt;false&lt;/b:CheckedIn&gt;
                &lt;b:FirstName&gt;XXXXXXX&lt;/b:FirstName&gt;
                &lt;b:Gender&gt;Male&lt;/b:Gender&gt;
                &lt;b:Id&gt;XXXXXXXX&lt;/b:Id&gt;
                &lt;b:IsOnTour&gt;false&lt;/b:IsOnTour&gt;
                &lt;b:LastName&gt;XXXXXX&lt;/b:LastName&gt;
                &lt;b:Photo&gt;XXXXXXXX&lt;/b:Photo&gt;
                &lt;b:GroupName&gt;XXXXX&lt;/b:GroupName&gt;
            &lt;/a:Value&gt;
      &lt;/a:KeyValueOfintKidf4KEWLbb&gt;
</code></pre><br>知道为什么它没有其他元素吗?<br>我以前从未做过网络服务之类的,所以解释越简单越好......<br><br>当我 NSLog 元素时,我可以看到它正确地通过了 xml 文档<br><pre><code>NSLog(@&#34;Processing Element: %@&#34;, elementName);
</code></pre><br>例子:<br><pre><code>Processing Element: a:KeyValueOfintKidf4KEWLbb
Processing Element: a:Key
Processing Element: a:Value
Processing Element: b:CheckedIn
Processing Element: b:FirstName
Processing Element: b:Gender
Processing Element: b:Id
Processing Element: b:IsOnTour
Processing Element: b:LastName
Processing Element: b:Photo
Processing Element: b:GroupName
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p>在 <code>didEndElement</code> ,尝试改变这部分:<br><pre><code>if()

    NSLog(@&#34;end of xml&#34;);
    return;
</code></pre><br>到:<br><pre><code>if()
{
    NSLog(@&#34;end of xml&#34;);
    return;
}
</code></pre><br>没有将这两个语句放在 <code>if</code> 之后在一个街区中,<code>return</code>每次都被执行。</p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - 使用 NSXMLParser 问题解析,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/9096563/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/9096563/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - 使用 NSXMLParser 问题解析