2012-04-20 9 views
4

私はソロタグ付きのNSXMLElement。すなわち、 <タグ名attributeNameに=属性値/>

<tagname attribute=attributevalue></tagname> 

を使用してのように、通常のXMLタグを作成することができています(個別の終了タグのないすなわち。タグ) ソロタグを含まなければならないXML文字列を作成しようとしていますコード

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

が、私はこの

<tagname attributename=attributevalue /> 

答えて

2
<tagname attribute=attributevalue></tagname> 
のようにそれを必要とします0

<tagname attributename=attributevalue /> 

はXMLに完全に同等であり、それはあなたがそれらを書くのですか書式設定の唯一の問題です。 「きれいにフォーマットされた」XMLソースコードを作成する特別な理由がなければ、私はそれを気にしません。

また、上記のコードではどちらの表現も作成されません。XMLソースコードの形式ではなく、内部構造にデータを格納します。あなたの質問は XMLツリー構造をXMLソースファイルにエクスポートしたい場合にのみ有効です。

+0

私が通信したいサーバーはASPです。 ASPのXMLパーサーは、どちらも同じであると考えていますか? – Renjith

+0

ASPのXMLパーサーは分かりませんが、両方のフォーマットを受け入れない場合は、両方が標準(および同等)のXMLセグメントであるため、パーサーにとって非常に深刻なバグです。 – MrTJ

+1

確かに、XML仕様に戻ってみましょう。http://www.w3.org/TR/REC-xml/#d0e2433 'コンテンツのない要素は空であると言われます。空要素の表現は、開始タグの直後に終了タグ、または空要素タグのいずれかです。 'AND '空の要素タグは、内容のない要素に使用できます。キーワードEMPTYを使用して宣言します。相互運用性のために空の要素のタグを使うべきです(SHOULD)。そして、SHOULDはEMPTYと宣言された要素に対してのみ使用してください。 '注:' SHOULD'は必須ではないので、 – MrTJ

1

MrTJの言うことはすべて正しいですが、ノードのテキストコンテンツを設定しているためシリアライザが混乱している可能性があります。テキストコンテンツノード(長さがゼロの文字列があるにもかかわらず)を見て、開始タグと終了タグを作成することがあります。

てみてください何かのように:NSXMLNodeCompactEmptyElementこのよう

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

たNSDataを作成するときに、あなたのファイルを保存する前に、このオプションを追加

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で宣言されています。

関連する問題