2011-11-14 12 views
0

は、私は次のように単純な関数を作成したい、ユーザー定義されたオブジェクトにXMLデータを解析:は、SAXやDOM

vector <User> convertXMLDataToUserList (string xmlData) { …. } 

はのはです。xmlDataは、以下のようなものであることを言ってみましょう:

<users> 
    <user> 
     <firstname>ABC</firstname> 
     <lastname>DEF</lastname> 
     <!-- …… other attributes --> 
    </user> 
    <user> 
     <firstname>ABC</firstname> 
     <lastname>DEF</lastname> 
     <!-- …… other attributes --> 
    </user> 
    <!-- …… More users --> 
</users> 

私が必要これらのxmlDataをユーザーオブジェクトのコレクションに解析します。私はこれを処理するためにQtXMLライブラリを使用したいと思います。これを処理するXML構文解析アプローチ、DOMまたはSAX、そしてそれはなぜですか?

もちろん、xmlデータのコンテンツは上記のユーザー属性に限定されませんが、他のさまざまな要素も含めることができます。 xmlデータをユーザー定義のオブジェクトに解析する際の例/チュートリアルリンクは、本当に便利です(QtXMLライブラリを使用)。

答えて

2

は、最初にこれを読んで、あなたが使用したいものは何でも選択に応じて

2012年11月6日(火曜日)・アンドロイドプロジェクト、DOM解析、構文解析し、コードを解析し、DOM、応答解析、SAX解析、サックスで掲示されるXML解析解析するコード、ソースコード、Webサービスのコード、Webサービスの構文解析、XML、XML解析、xmlpullを解析

JAXP:

JAXPはXML処理用のJava APIの略です。 w3cの仕様です。 JAXPはSUNのAPIです。

JAXP APIを使用すると、xmlドキュメントを2つのmthodで処理できます。 DOM: 処理前にxmlドキュメント全体をメモリに格納します。 より多くのメモリを占有します。 任意の方向にトラバースします。 DOMで動作するように ツリーデータ構造

ステップ:

  1. のDocumentBuilderFactory

    のDocumentBuilderFactory工場= DocumentBuilderFactory.newInstanceを(作成)。

  2. DocumentBuilderのビルダー=工場DocumentBuilderの

    を作成します。 newDocumentBuilder();

    1. 入力ストリームを取得するClassLoader cls = DomReader.class.getClassLoader(); InputStream is = cls.getResourceAsStream( "xml file"); 4. DocumentBuilderオブジェクトのparseメソッド を呼び出してxmlファイルを解析し、Documentオブジェクトを取得します。 ドキュメントドキュメント= builder.parse(is); 5.ドキュメントオブジェクトを使用してDOMツリーをトラバースする.SAX: 簡単なxml解析。 ノードごとにノードを解析します 横断は上から下へ メモリ使用量が少ない サックスではナビゲーションができません。必要なハンドラを パブリッククラスSaxParseを実装

    //たDefaultHandler {}のSAXParserFactoryのSAXParserFactory工場=のSAXParserFactoryの//新しいインスタンスを拡張します。newInstance(); // SAX PARSERの新しいインスタンスSAXParser saxparser = factory.newSAXParser(); // xmlドキュメントを解析する SAXParser.parse(新しいファイル(解析するファイル)、新しいSAXXMLParserImpl());

+1

回答を書式設定する際に少し努力してください。これは部分的には判読できません – kleopatra