2009-07-31 12 views
1

私はこの質問で正確に何を意味するかをできるだけ明確に説明しようとします。xml iPhoneで解析して同じ名前の他のタグを取得する

がXMLの代わりにこの

<Books> 
<Book id="1"> 
<title>Circumference</title> 
<author>Nicholas Nicastro</author> 
<summary>Eratosthenes and the Ancient Quest to Measure the Globe.</summary> 
</Book> 

<Book id="2"> 
<title>Copernicus Secret</title> 
<author>Jack Repcheck</author> 
<summary>How the scientific revolution began</summary> 

</Book> 

</Books> 
私は上記のサイトの指示に従った場合それは今、この

<Books> 
<Book id="1"> 
<title>Circumference</title> 
<author>Nicholas Nicastro</author> 
<summary id ='1'>Eratosthenes and the Ancient Quest to Measure the Globe.</summary> 
<summary id ='2'>Eratosthenes more info in another tag.</summary> 
<summary id ='3'>Eratosthenes and again another tag.</summary> 
<summary id ='4'>Eratosthenes and the final tag another one here</summary> 
</Book> 

<Book id="2"> 
<title>Copernicus Secret</title> 
<author>Jack Repcheck</author> 
<summary id ='1'>How the scientific revolution began</summary> 
<summary id ='2'>Eratosthenes more info in another tag.</summary> 
<summary id ='3'>Eratosthenes and again another tag.</summary> 
<summary id ='4'>Eratosthenes and the final tag another one here</summary> 
</Book> 

</Books> 

のようになります。

のように見える、それは要約を処理する方法を説明していません2,3,4(xmlはそのように見える必要があります)と出力の表示方法私が得るのは最後の行だけです。誰も私が他のものをどのように得ることができるかについてのアイデアを持っていますか(この場合2,3は、おそらく最後のものをcurrentElementValueの最後に表示するように見えます)。

ここでも属性を指定する必要がありますか、パーサーに新しい検索タグを作成する必要がありますか?

答えて

0

NSMutableArrayのような配列のようないくつかのコンテナのすべての値を保持することによって、これまでに解析した要約要素を追跡する必要があります。したがって、要約を保持するNSStringの代わりに、あなたが解析した要約のリストを保持するNSMutableArrayがあります。

パーサーでサマリーが発生するたびに、読み込んだ文字列にNSStringサマリーを設定しないでください(古い値を置き換え、最後のサマリー・タグのみを取得する理由が説明されています)。代わりに、新しい文字列として格納し、その文字列をNSMutableArrayに追加します。

リンク先のブログ投稿のデザインの問題は、KeyValueCodingを使用してBookオブジェクトのプロパティを設定することで、項目を配列項目に非常によく追加することができないことです。したがって、パーサの要約要素に特別な処理を追加し、要約配列に項目を追加できるようにBookクラスにメソッドを追加する必要があります。 KVCでそれを行う方法については、this postを参照してください。

+0

thnxたくさん..私はこれを調べるつもりです...残念ながら私はキーを読む必要がある私が思うより良い理解を得るためにコーディングする文書)。 –

2

私はthisだと思います。属性からidフィールドの値を取得し、その値を使って変数に割り当てることができます。

だから私は私のdidStartElementで何かこれを(属性がヘッダーで宣言された変数です)かもしれません。そうで

if([[attributes valueForKey:@"id"] intValue] == 1){ 
    doSomething 
}else if([[attributes valueForKey:@"id"] intValue] == 2){ 
    doSomethingElse 
}... 

と:その後、私のfoundCharactersでこのような何かを

if([elementName isEqualToString:@"Summary"]){ 
    attributes = attributeDict; 
} 

をすべてのデータを取り出すまで

N.B.これは100%のテストされていないコードですが、私はそれが動作するかもしれないと確信しています...

+0

thnxたくさん、私は言わなければならないが、それはちょっと感動的な解決策を感じるように、私はより効率的なアプローチを好むが、あなたの意見を本当に感謝している。 –

関連する問題