我正在尝试创建一个应该包含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 />
答案 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;
}