ios - 简单的 NSData 类别来解析带有西里尔字母的 XML

标签 ios objective-c xml nsdata

我必须用 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>

最佳答案

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

  1. 由于 XML 最初被设计为带注释的文本格式,因此空白(空格、换行符)处理并不完全适合仅数据使用。您可以修剪所有生成的字符串 ([stringVar stringByTrimmingCharactersInSet:[NSCharacterSet WhitespaceAndNewlineCharacterSet]]),调整 XMLReader 来执行此操作,或者使用 http://ios.biomsoft.com/2011/09/11/simple-xml-to-nsdictionary-converter/ 处的 XML 解析器。 (默认情况下会这样做)。

  2. 西里尔字符的有趣输出是调试器输出中非 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/

相关文章:

ios - 在核心数据中使用 UIManagedDocument 的标准(或正确)方法是什么

ios - CONFIGURATION_AppStore。这是什么?

android - NestedScrollView 内的 RecyclerView 导致 RecyclerView 膨胀所有元素

xml - 如何构建这个使用 SSIS、XML 和 BizTalk 技术的项目?

iphone - 在正确的时间显示键盘 iOS7

ios - 检查核心数据数据库中保存的 ID 并在 Swift 3 中显示/隐藏按钮 “Add to Fav”

ios - 在 NSMutableArray 中搜索对象并删除冗余值的最有效方法

objective-c - 无法访问 Pod 内的 Pod lib 依赖项,只能在客户端 App 内访问

ios - 容器 View 中的 UICollectionView

python - 我的 pos_tag 遍历每个字母,我需要它应用于整个单词