2

XML ファイルを解析できます。しかし、私は奇妙なエラーに直面しています。私のXMLファイル形式はこのようなものです

<contact>
   <contactServiceTag>3B92E6A7-B599-EAE9-1CB7B5592CB8695C</contactServiceTag>
   <contactDeletedBoolean>0</contactDeletedBoolean>
   <contactLinkStatus>Stored</contactLinkStatus>
   <contactName>P4</contactName>
   −
   <contactEmailAddresses>
     <workEmail>updatedp4@isol.co.in</workEmail>
     <personalEmail/>
     <otherEmail/>
   </contactEmailAddresses>
   <contactLastUpdated>{ts '2010-01-22 10:05:42'}</contactLastUpdated>
   <contactPhotoExists>False</contactPhotoExists>
</contact>

解析中、パーサーが要素contactLastUpdatedを解析すると、foundCharactersメソッドが複数回呼び出され、値{ts on first run, \' on second run, 2010-01-22 10:05:42 on third run, \'が返されます。 4回目の実行で、最後の実行で最後に}。didEndElement メソッドを呼び出したときに、最後の値 ( } ) のみを取得します。

このタイプのエラーを解決する方法を提案してください

4

3 に答える 3

4

parser:foundCharacters:のような< NSXMLParserDelegate >コールバックの実装では、見つかった文字をインスタンス変数に格納し、場合によっては文字列を連結して、parser:didEndElement:namespaceURI:qualifiedName:が呼び出されたときに完全なものが得られるようにする必要があります。インスタンス変数の状態を介してオブジェクトで使用可能な要素値/本体。

また、 SAXパーサーとDOMパーサーの違いについても読むことができます。NSXMLParserはSAXパーサーであり、使い勝手は劣りますが、DOMパーサーよりもパフォーマンスが優れています。

于 2010-01-23T11:25:55.603 に答える
0

要素を入力するときに文字列を作成し、foundCharactersが呼び出されたときに文字列に追加してから、didEndElementでその長さ/値を確認しますか?

于 2010-01-23T11:21:46.830 に答える
0

ジョンとモブの両方の答えは正しいです、それはそれをする方法です。それがどのように機能するかをよりよく理解するために、AppleのSeismicXMLサンプルプロジェクトをご覧になることをお勧めします。NSXMLParserを非常に明確な方法で使用し、現在の状況を処理する方法も示します。

于 2010-01-23T15:48:01.437 に答える