2012-01-30 20 views
0

NSXMLParserでネストされたノードの解析を行う方法。私たちは別のnodesameノードが含まれているnodesameノードを含むマスターデータノードを持つ上記でnsxmlparserを1文字ずつ解析していますか?

<data> 
    <nodesame attrisame="this is same"> 
     <nodesame> this is also same </nodesame> 
     <nodedifferent> this is different although </nodedifferent> 
    </nodesame> 
</data> 

:このパーサがXMLノードごとのやり方を解析するために知っているので、どのように我々は以下のように同じ名前で解析する複数のノードを処理する必要があります内部。両方のノード名を異なるコンテキストで区別する方法を教えてください。

私の代理人から辞書/配列を取得するためのいくつかの良い方法を提案してください:

parser:didEndElement:namespaceURI:qualifiedName 

私はlibxml2のとtouchXMLとfamaliarていますが、NSXMLParserを使用すると、私は狂気作っているプラ​​ス我々はので、同じを使用する必要があります私たちが持っているコードはNSXMLParserを使用しているので、Libxmlに変更すると地獄になります。

答えて

0

nsxmlparserを使用すると、上から下に移動し、didStartElementdidEndElementという一致するペアが呼び出されます。したがって、最初の質問(親ノードと同じ名前の子ノード内にいるときを知る方法)では、答えはdidStartElementが呼び出されたときに、同じノード名の別のdidStartElementが呼び出されたときを追跡することです間にdidEndElementへの呼び出し。

ここで、各要素に名前が付けられているので、配列は一般的な解析に実際には適用できません。これはJSONレスポンスでのみ実行可能です。 2番目の質問(xmlの配列や辞書を作成する方法)では、各ノードを別の辞書である "属性"のキーを持つ独自の辞書にすることです。私はあなたの例のために、このようなものを作成します。ここでの問題の

{"data": 
    {"nodesame": 
     {"attributes": 
      {"attrisame":"this is same"} 
     }, {"nodesame": 
       {"text":"this is also same"} 
     }, {"nodedifferent": 
       {"text":"this is different although"} 
     } 
    } 
} 

一つは、それはかなりの解決策ではありません、言葉「属性」と「テキスト」を占有しています。

+0

私は毎回インクリメンタを維持する必要があります。なぜなら、didEndElementが呼び出されるたびに割り当てるため、古いデータが削除され、新しい配列が割り当てられるからです。 – aksani56

+0

あなたはそうすることができます。ですから、あなたが 'didStartElement'に行き、名前が" nodesame "であれば+1し、あなたが' didEndElement'に行き、名前が "nodesame"であれば-1を行います。カウンターが1のときは常に2番目のレベルにあり、0のときは最初のレベルになります。 – vakio

+0

ありがとうございました! – aksani56

関連する問題