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 クラス リファレンス
セクション定数

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 に答える