gpt4 book ai didi

ios - 解析节点内包含换行符的 xml

转载 作者:行者123 更新时间:2023-11-28 20:08:52 27 4
gpt4 key购买 nike

我正在尝试从 Xcode 中的 URL 解析 XML。我遇到的问题是节点内的换行符。当我解析以下 XML 时,我得到的地址非常好,但不是名称或描述。另外,如果碰巧出现“&”符号,解析器将停止解析。我该如何绕过这两个障碍?

这是我尝试解析的 XML 示例:

    <item>
<Name>
John Smith
</Name>
<Address>555 WHITEHEAD ST, Greenville, NY 55555</Address>
<Description>
Brick house - white trim
</Description>
</item>
<item>
<Name>
Jane Smith
</Name>
<Address>555 WHITEHEAD ST, Greenville, NY 55555</Address>
<Description>
Brick house - white trim & stone drive
</Description>
</item>

这是我用来解析 XML 的代码:

-(id) loadXMLByURL:(NSString *)urlString {

arrests = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];

return self;
}

-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"item"]) {

currentArrest = [[ArrestObject alloc] init];
}
}

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

currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

-(void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"channel"]) {
return;
}
if ([elementName isEqualToString:@"item"]) {
[self.arrests addObject:currentArrest];

currentArrest = nil;
}
else {
[currentArrest setValue:currentNodeContent forKey:elementName];

currentNodeContent = nil;
}
}

非常感谢任何建议!

最佳答案

foundCharacters:每个元素可以调用多次。您需要将获得的每个字符串附加到您的 currentNodeContent变量,而不仅仅是设置它。所以基本上,重置 currentNodeContentdidStartElement方法并使用 didEndElement 中的完整附加值方法。

而且你不能使用 stringByTrimmingCharactersInSet去除换行符,因为这只会去除字符串末尾的空格,不会去除中间的空格。

最后,& 的问题字符很简单——它不是 XML 中的有效字符。每当您需要实际的 & 时XML 中的字符,则需要使用 &amp; ,就像在 HTML 中一样。同样适用于 <> - 使用 &lt;&gt;分别。

更新:

didStartElement做:

currentNodeContent = [NSMutableString string];

foundCharacters做:

[currentModeContent appendString:string];

关于ios - 解析节点内包含换行符的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21031680/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com