【问题标题】:I need help to debug my XML parsing please我需要帮助来调试我的 XML 解析请
【发布时间】:2010-04-23 21:59:17
【问题描述】:

我正在解析这一行:

<type>branch</type>

didEndElement中使用此代码

if ([elementName isEqualToString:@"type"]) {

        [currentBranchDictionary setValue:currentText forKey:currentElementName];

    }

当我测试type 键中的值时,它不包含branch,而是包含branch\n。这是我正在执行的测试:

    if ([[currentBranchDictionary valueForKey:@"type"] isEqualToString:@"branch"]) {
        NSLog(@"no new-line");
    } else if ([[currentBranchDictionary valueForKey:@"type"] isEqualToString:@"branch\n"]) {
        NSLog(@"new-line");
    }

这将返回“换行”输出

这里是 foundCharacters 方法:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    [currentText appendString:string];
}

我不明白在哪里添加回车,有人可以帮忙吗?

【问题讨论】:

  • 第一个代码sn-p是什么方法?显示 foundCharacters 方法。 currentText 还设置或修改了哪些其他地方?
  • 第一个代码sn-p在didEndElement中。我会发布找到字符的方法,谢谢。
  • 我也在currentText = [NSMutableString string]; didStartElement
  • 看不到任何明显的东西。 xml 中是否只返回一个 元素? xml解析后是否修改了currentBranchDictionary?在 didEndElement 中,为什么 key 使用 currentElementName 而不是 elementName(检查它是否设置正确)。在 xml 中,是否有任何其他标签具有值分支\n?
  • 有很多<type>元素,源文件中没有一个\nCurrentBranchDictionary 用于保存几个元素的内容。他们每个人都附加了\n

标签: objective-c xml cocoa-touch parsing


【解决方案1】:

我怀疑您的 XML 包含您的编辑器未显示的回车符 ("\r")。 XML 规范要求在将结果报告给您的应用程序之前将这些转换为换行符(“\n”):

http://www.w3.org/TR/REC-xml/#sec-line-ends

您能验证您的 XML 文件的内容吗? xxd 命令的输出是什么?这是我创建的文件的输出。注意额外的 0d 字符:

0000000: 3c74 7970 653e 6272 616e 6368 0d3c 2f74  <type>branch.</t
0000010: 7970 653e                                ype>

【讨论】:

  • 嗨,bkail,我手动输入了包含&lt;type&gt;branch&lt;/type&gt; 的行,它们没有回车符。如果我在将其内容放入字典之前输出currentText,则它没有回车。如果我在设置后立即输出valueForKey:@"type",它没有回车。但是,如果我在离开didEndElement 后输出valueForKey:@"type",它确实有一个回车。我不明白为什么。
  • 我发现了问题。 \r 在封闭元素之后,例如 &lt;type&gt;branch&lt;/type&gt;\r。这意味着我正在关闭元素,调用didEndElement,我将输出currentText,这将包含branch。然而,foundCharacters 将在行尾调用\r。这会将\r 附加到currentText,其值由[currentBranchDictionary valueForKey:@"type"] 指向。 QED
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多