【发布时间】:2012-04-25 10:51:58
【问题描述】:
我正在读取和写入的 XML 数据库的注释字段存储为 NSXMLElement 的属性。一个条目包含换行符 (0x0a) 字符。这些由我解析为
 的文档中的非 NSXML 编码器编码,并由 NSXML 正确解析。它们导致 NSString 在内存中包含 unicode 值 0x0a 0x00(intel 字节排序)。
例如:
<INFO BITRATE="192000" GENRE="Podcast" COMMENT="Test & More Test 

After the Line Feeds"</INFO>
当将此 NSString 作为 NSXMLElement 属性的值写回时,它不会被编码回并导致以下内容输出到 xml 文件:
<INFO BITRATE="192000" GENRE="Podcast" COMMENT="Test & More Test
After the Line Feeds"</INFO>
在重新读取文件时当然不会正确解析。
似乎NSXMLNodePreserveCharacterReferences 或NSXMLNodePreserveEntities 之类的节点选项应该是可行的方法,但它似乎没有任何帮助。
我一定错过了显而易见的事情,但我整天都被困在这个问题上。
【问题讨论】:
-
您在阅读或写作时使用了这些选项吗?
-
一开始我没有任何选择(除了写作时在整个文档上使用 NSXMLNodePrettyPrint)。
-
我在整个文档上有
NSXMLNodePrettyPrint,在写的时候在cmets属性节点上有NSXMLNodePreserveCharacterReferences | NSXMLNodePreserveEntities。阅读时我没有任何选择。只需在节点上使用[[anElement attributeForName:@"Comments"] stringValue]。 -
Preserve选项仅在读取/解析 XML 时有用。这是在文档中。查找NSXMLNodePreserveCharacterReferences并向下滚动到讨论部分。您的另一个选择是使用标准的NSString方法自己进行替换,然后使用-setStringValue:resolvingEntities:将其设置在NSXMLNode上,传递NO。 -
我会试试的,谢谢。奇怪的是它与它的读/写行为不一致(即它转换 颠覆阅读但在写入时不将其转换回来)。
标签: xml cocoa nsxmlparser nsxmldocument nsxmlelement