0

这是我的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<Tests>
    <Test case="1">
        <str>200000</str>
    </Test>
    <Test case="2">
        <str>200thousand</str>
    </Test>
    <Test case="3">
        <str>共20萬&lt;/str>
    </Test>
    <Test case="4">
        <str>20萬&lt;/str>
    </Test>
</Tests>

这是解析器的一部分,这是非常标准的,因为我在大多数教程中都找到了它:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    if(!currentElementValue)
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    else
        currentElementValue = 
            (NSMutableString *) [string stringByTrimmingCharactersInSet:
                [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

然后我使用这一行将每个 currentElementValue 解析为 testObj 的每个变量

[testObj setValue:currentElementValue forKey:elementName];

该代码成功地将 XML 解析为 testObj。但是,问题是在第 4 种情况下,“20”消失了。即一旦一个元素以数字开头,然后是汉字,数字就消失了。

此外,如果我使用:

        [currentElementValue appendString:string];

代替:

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

元素可以显示所有字符,但以许多空格开头。

我想弄清楚为什么 numeric 会消失,并寻找解决方案来显示所有没有空格的字符。

提前感谢您提供的任何帮助!

4

1 回答 1

5

parser:foundCharacters:请参阅委托方法的文档:

解析器对象可以向委托发送几个 parser:foundCharacters: 消息来报告元素的字符。因为字符串可能只是当前元素的全部字符内容的一部分,所以您应该将它附加到当前的字符累积中,直到元素发生变化。

所以你必须使用appendStringin foundCharacters。额外的空白可能是由于您没有在didStartElementand中重置当前字符串didEndElement

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
     currentElementValue = nil;
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
     if (currentElementValue) {
         NSLog(@"%@ = %@", elementName, currentElementValue);
         currentElementValue = nil;
     }
}

如有必要,您可以删除didEndElement.

于 2013-02-03T08:07:14.867 回答