0

使用字符串创建 NSXMLNode:

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

产生以下输出:

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

1 回答 1

2
  1. 引用XML Spec

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

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

  2. 不。

  3. 两者都是。

如果您要求提供规范格式的字符串,这两个字符都将被转义:

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

输出:

node3=&gt;
于 2013-04-15T03:44:06.200 回答