我必须用XML字符串解析NSData,有人知道简单的类别吗?我有这样的JSON,但我被迫使用XML。我尝试使用XMLReader,它的界面看起来很干净,但我发现了一些问题:
到处都是神秘的新行字符和空格:
"comment_count" = {text = "\n \n 21";};
我的西里尔符号看起来如此:
"description_text" = {text = "\n \U041f\U0438\U043a\U0430\U0431\U0443\U0448};
示例:
<?xml version="1.0" encoding="UTF-8" ?>
<news>
<xml_count>43</xml_count>
<hot_count>449</hot_count>
<item type="text">
<id>1469845</id>
<rating>147</rating>
<pluses>171</pluses>
<minuses>24</minuses>
<title>
<![CDATA[Обновление огромного архива Пикабу!]]>
</title>
<comment_count>26</comment_count>
<comment_link>http://pikabu.ru/story/obnovlenie_ogromnogo_arkhiva_pikabu_1469845</comment_link>
<author>icq677555</author>
<description_text>
<![CDATA[Пикабушники, я обновил свой огромный архив текстовых постов из горячего!]]>
</description_text>
</item>
</news>
答案 0 :(得分:1)
我刚刚意识到发生了什么事。您的数据样本显然是在调试器中打印的NSDictionary
个实例。所以你找到的问题是:
由于XML最初是作为带注释的文本格式设计的,因此空白(空格,换行符)处理并不完全适合仅数据使用。您可以修剪所有生成的字符串([stringVar stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]
),调整XMLReader来执行此操作,或者使用http://ios.biomsoft.com/2011/09/11/simple-xml-to-nsdictionary-converter/处的XML解析器(默认情况下会这样做)。
您获得的西里尔字符的有趣输出是调试器输出中的非ASCII字符的正确转义(使用旧式属性列表格式)。它是调试器输出的工件。您的变量包含正确的字符。
顺便说一句:虽然JSON包含隐式类型信息(字符串总是引用,数字从不引用等),但没有模式文件的XML则不会。所以解析后的所有简单值都是字符串,即使它们最初都是数字。
<强>更新强>:
您正在使用的XML解析器仍包含Pesky new lines and whitespace in XML reader class中描述的旧空白处理代码(尽管注释另有说明)。应用答案底部提到的修复,即更改行:
[dictInProgress setObject:textInProgress forKey:kXMLReaderTextNodeKey];
为:
[dictInProgress setObject:[textInProgress stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] forKey:kXMLReaderTextNodeKey];