带有solo标签的NSXMLElement。即。 <tagname attributename =“attributevalue”> </tagname>

时间:2012-04-20 10:10:53

标签: objective-c macos nsxml nsxmldocument nsxmlelement

我正在尝试创建一个应该包含solo标签的XML字符串(即。标签没有单独的结束标签) 我能够创建像

这样的普通xml标签
<tagname attribute=attributevalue></tagname>

使用代码

NSXMLElement *childElement=[[NSXMLElement alloc] initWithName:childName];
childElement.stringValue=childValue;
[childElement addAttribute:[NSXMLNode attributeWithName:attributeName stringValue:attributeValue]];
[self.currentNode addChild:[childElement copy]];

但我需要像这样

<tagname attributename=attributevalue />

3 个答案:

答案 0 :(得分:8)

在保存文件之前,在创建NSData时,请添加以下选项: NSXMLNodeCompactEmptyElement

像这样:

NSData *xmlData =
  [xmlDoc XMLDataWithOptions:NSXMLNodePrettyPrint | NSXMLNodeCompactEmptyElement];

然后序列化您的文件:

  [xmlData writeToURL:theFile atomically:YES]

参考:NSXMLNode类引用
部分常量

  

NSXMLNodeExpandEmptyElement
  请求在空时扩展元素;例如,&lt; flag&gt;&lt; / flag&gt;。这是默认值   适用于Mac OS X v10.4及更高版本。在NSXMLNodeOptions.h中声明。

     

NSXMLNodeCompactEmptyElement
  要求在空的时候签订一个元素;例如,&lt; flag /&gt;。
  适用于Mac OS X v10.4及更高版本。在NSXMLNodeOptions.h中声明。

答案 1 :(得分:2)

<tagname attribute=attributevalue></tagname>

<tagname attributename=attributevalue />

在XML中是完全等效的,只是格式化问题如何编写它们。如果您没有特别的理由来创建“格式精美”的XML源代码,我不会为此烦恼。

此外,上面的代码既不创建任何表示:它将数据存储在内部结构中,而不是XML源代码的形式。只有当您想要将XML树结构导出到XML源文件中时,您的问题才有效。

答案 2 :(得分:1)

MrTJ所说的一切都是正确的,但是由于你设置了节点的文本内容,序列化器可能会被混淆。它可能是它看到文本内容节点(即使它具有零长度字符串)并创建开始和结束标记,因为它完全存在。

尝试类似:

if ([childValue length] > 0)
{
    childElement.stringValue=childValue;
}