NSXMLElement с соло тегом. то есть. <tagname attributetenue = attributevalue />
Я пытаюсь создать строку 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 ответа
Перед сохранением файла при создании NSData добавьте эту опцию: NSXMLNodeCompactEmptyElement
Как это:
NSData *xmlData =
[xmlDoc XMLDataWithOptions:NSXMLNodePrettyPrint | NSXMLNodeCompactEmptyElement];
Затем сериализуйте ваш файл:
[xmlData writeToURL:theFile atomically:YES]
Ссылка: ссылка на класс NSXMLNode
Константы раздела
NSXMLNodeExpandEmptyElement
Требует, чтобы элемент был расширен, когда он пуст; например,flag>. Это по умолчанию.
Доступный в Mac OS X v10.4 и позже. Объявлен в NSXMLNodeOptions.h.NSXMLNodeCompactEmptyElement
Требует, чтобы элемент был свернут, когда он пуст; например,.
Доступный в Mac OS X v10.4 и позже. Объявлен в NSXMLNodeOptions.h.
<tagname attribute=attributevalue></tagname>
а также
<tagname attributename=attributevalue />
полностью эквивалентны в XML, и это только вопрос форматирования, как вы их пишете. Если у вас нет особых причин создавать "красиво отформатированный" исходный код XML, я бы не стал беспокоиться об этом.
Кроме того, приведенный выше код не создает ни представления: он хранит данные во внутренней структуре, а не в форме исходного кода XML. Ваш вопрос может быть действительным, только если вы хотите экспортировать древовидную структуру XML в исходный файл XML.
Все, что говорит MrTJ, правильно, но возможно, что сериализатор запутан, потому что вы установили текстовое содержимое узла. Может случиться так, что он видит узел текстового содержимого (даже если он имеет строку нулевой длины) и создает начальный и конечный теги, потому что он существует вообще.
Попробуйте что-то вроде:
if ([childValue length] > 0)
{
childElement.stringValue=childValue;
}