0

我必须用 XML 字符串解析 NSData,有人知道简单的类别吗?我有这样的 JSON,但我被迫使用 XML。我尝试使用 XMLReader,它的界面看起来很干净,但我发现了一些问题:

  1. 到处都是神秘的换行符和空格:

    "comment_count" = {text = "\n              \n              21";};
    
  2. 我的西里尔符号看起来是这样的:

    "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>
4

1 回答 1

1

我才意识到发生了什么事。您的数据样本显然是NSDictionary在调试器中打印的实例。所以你发现的问题是:

  1. 由于 XML 最初设计为带注释的文本格式,因此空格(空格、换行符)处理并不完全适合仅用于数据的使用。您可以修剪所有生成[stringVar stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]字符串(默认情况下)。

  2. 西里尔字符的有趣输出是调试器输出中非 ASCII 字符的正确转义(使用旧式属性列表格式)。这是调试器输出的产物。您的变量包含正确的字符。

顺便说一句:虽然 JSON 包含隐式类型信息(始终引用字符串,从不引用数字等),但没有架构文件的 XML 则不包含。所以所有解析的简单值都将是字符串,即使它们最初是数字。

更新

您正在使用的 XML 解析器仍然包含在 XML 阅读器类中讨厌的新行和空白中描述的旧空白处理代码(尽管注释另有说明)。应用答案底部提到的修复,即更改行:

[dictInProgress setObject:textInProgress forKey:kXMLReaderTextNodeKey];

至:

[dictInProgress setObject:[textInProgress stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] forKey:kXMLReaderTextNodeKey];
于 2013-08-12T18:24:07.123 回答