我必须用 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>
最佳答案
我刚刚意识到发生了什么事。您的数据样本显然是调试器中打印的 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];
关于ios - 简单的 NSData 类别来解析带有西里尔字母的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18193557/