带有实体的NSXMLNode textWithStringValue

时间:2013-04-15 02:36:35

标签: objective-c xml macos

使用字符串创建NSXMLNode:

NSXMLNode *node1 = [NSXMLNode textWithStringValue:@"<"];
NSLog(@"node1=%@",node1);
NSXMLNode *node2 = [NSXMLNode textWithStringValue:@">"];
NSLog(@"node2=%@",node2);

产生以下输出:

node1=&lt;
node2=>
  1. 为什么是“&lt;”字符转义(即转换为"&lt;"),而“&gt;”性格不是?
  2. 这是一个错误吗?
  3. 哪个节点处理正确?

1 个答案:

答案 0 :(得分:2)

  1. 引用XML Spec

      

    &符号(&amp;)和左尖括号(&lt;)不得以其文字形式出现,除非用作标记分隔符,或用于注释,处理指令或CDATA部分。 [...]右角括号(&gt;)可以使用字符串“&amp; gt;”来表示,并且为了兼容性,必须使用“&amp; gt;”进行转义或字符串“]]&gt;”中的字符引用,当该字符串未标记CDATA部分的结尾时。

    简而言之,有些情况>不必转义,例如它出现在属性中。

  2. 没有

  3. 两者都是。

  4. 如果您要求字符串in canonical format,则两个字符都将被转义:

    NSXMLNode *node3 = [NSXMLNode textWithStringValue:@">"];
    NSLog(@"node3=%@",[node3 canonicalXMLStringPreservingComments:NO]);
    

    输出:

    node3=&gt;