4

我正在尝试创建一个应包含单独标签的 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 />
4

3 回答 3

8

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

像这样 :

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

然后序列化你的文件:

  [xmlData writeToURL:theFile atomically:YES]

参考:NSXMLNode 类参考
Section Constants

NSXMLNodeExpandEmptyElement
  请求一个元素在空时应该展开;例如,<标志></标志>。这是默认设置。
  适用于 Mac OS X v10.4 及更高版本。在 NSXMLNodeOptions.h 中声明。

NSXMLNodeCompactEmptyElement
  请求一个元素在空时应该收缩;例如,<标志/>。
  适用于 Mac OS X v10.4 及更高版本。在 NSXMLNodeOptions.h 中声明。

于 2012-09-07T07:27:57.650 回答
2
<tagname attribute=attributevalue></tagname>

<tagname attributename=attributevalue />

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

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

于 2012-04-20T10:16:07.567 回答
1

MrTJ 所说的一切都是正确的,但序列化程序可能会因为您设置了节点的文本内容而感到困惑。它可能会看到文本内容节点(即使它有一个零长度的字符串)并创建开始和结束标签,因为它根本存在。

尝试类似:

if ([childValue length] > 0)
{
    childElement.stringValue=childValue;
}
于 2012-04-20T13:08:49.030 回答