将换行符编码为NSXMLElement属性的值

时间:2012-04-13 02:51:19

标签: xml cocoa nsxmlparser nsxmldocument nsxmlelement

我正在读写的XML数据库的注释字段存储为NSXMLElement的属性。一个条目包含换行符(0x0a)字符。这些由我正在解析为
的文档中的非NSXML编码器编码,并由NSXML正确解析。它们导致NSString在内存中包含unicode值0x0a 0x00(英特尔字节排序)。

例如:

<INFO BITRATE="192000" GENRE="Podcast" COMMENT="Test &amp; More Test &#xA;&#xA;After the Line Feeds"</INFO>

当将此NSString作为NSXMLElement属性的值写回时,它不会被编码回来并导致以下内容输出到xml文件:

 <INFO BITRATE="192000" GENRE="Podcast" COMMENT="Test &amp; More Test 

After the Line Feeds"</INFO>

当重新读取文件时,当然无法正确解析。

似乎应该选择像NSXMLNodePreserveCharacterReferencesNSXMLNodePreserveEntities这样的节点选项,但它似乎没有任何帮助。

我一定错过了明显的事情,但我整天都被困在这一天。

2 个答案:

答案 0 :(得分:1)

与Apple联系,这是NSXMLDocument的一个已知问题,现在它已作为错误报告提交。

建议的解决方法包括暂时使用libxml2。

如果我在将来的版本中看到这个问题,我会发表评论。

答案 1 :(得分:-1)

苹果说:

  

名称中带有“保留”的选项仅在解析XML的外部源时适用;它们对以编程方式创建的节点对象没有影响。 NSXMLDocument的初始化和输出方法中使用了其他选项。有关详细信息,请参见NSXMLDocument参考文档。   它对我不起作用,我认为这是一个错误。

我用KissXML解决了这个问题。