我对我正在解析的基本xml文件有疑问,只是放入简单的下一行(Enters)。 我将尝试用下一个例子来解释我的问题。 我(仍然)正在构建一个xml树,所有它必须做的(这是一个testtree)将摘要放在一个项目列表中。然后我将它导出到一个plist,这样我就能看出一切是否正确完成。
执行此操作的方法在解析器中看起来像这样
if([elementName isEqualToString:@"Book"]) {
[appDelegate.books addObject:aBook];
[aBook release];
aBook = nil;
}
else
{
[aBook setValue:currentElementValue forKey:elementName];
NSString *directions = [NSString stringWithFormat:currentElementValue];
[directionTree = setObject:directions forKey:@"directions"];
}
[currentElementValue release];
currentElementValue = nil;
}
plistfile的导出发生在书籍的结尾处。
下面是第一个xmlfile
<?xml version="1.0" encoding="UTF-8"?>
<Books><Book id="1"><summary>Ero adn the ancient quest to measure the globe.</summary></Book><Book id="2"><summary>how the scientific revolution began.</summary></Book></Books>
这是我的输出
http://img139.imageshack.us/img139/9175/picture6rtn.png
如果我像这里做一些调整
<?xml version="1.0" encoding="UTF-8"?>
<Books><Book id="1">
<summary>Ero adn the ancient quest to measure the globe.</summary>
</Book>
<Book id="2">
<summary>how the scientific revolution began.</summary>
</Book>
</Books>
我的方向键与字符串字符串保持为空...
http://img248.imageshack.us/img248/5838/picture7y.png
我从来不知道,如果我只是输入一个输入就会产生这样的影响。 有没有人知道这个解决方案,因为我的真正的xml文件看起来像这样。
PS。有趣的是我实际上可以看到(调试时)我的方向字符串(NSString方向)填充两个情况下的currentElementValue。
答案 0 :(得分:1)
检测您的代码;具体来说,就在读取...的行之上。
[directionTree setObject:directions forKey:@"directions"];
...(我删除了一个迷路=)尝试添加...
NSLog(@"setting directions to '%@'", directions);
我打赌你会看到每个元素多次记录上面的内容。具体来说,&lt; / summary&gt;之间的换行符和&lt; / book&gt; tag本身就是一个元素,就像&lt; summary&gt;&lt; / summary&gt;中的文本一样。 tag是一个元素。
现在,你可以继续沿着尝试特殊情况的道路继续这个和另一个,但这是错误的。
您需要将XML解析为结构化文档 - 作为节点树。具体来说,您应该寻找&lt; summary&gt;在某个地方标记,然后抓住挂在它下面的元素(应该是,IIRC,XML术语中的TEXT类型 - 已经有一段时间了。)
或者,更好的是,在系统上使用一种XML解析API。立即想到NSXMLDocument。如果使用iPhone(这个问题没有说明),你需要使用NSXMLParser而不是NSXMLDocument,因为它不可用。
或者,甚至更好,因为这看起来像常规数据模式的非常直接的XML封装,使用CoreData。 CoreData非常适合存储此类信息。如果您的XML旨在成为交换格式,您将不希望使用CoreData,因为它生成的XML完全是自己设计的。