カイル、
(この記事の自己promoteyな性質を許しなさい...私は数ヶ月のために、このライブラリーに取り組んできた、それはすべてオープンソースです/ Apache 2は、自己解決的ではなく、ただ助けようとしています)。
は、私はちょうど私がSJXPまたは「単純なJava XMLパーサを」呼んでいるライブラリをリリースしhttp://www.thebuzzmedia.com/software/simple-java-xml-parser-sjxp/
それはどんな仕様に準拠XMLの上に座って非常に小さい/タイト(4クラス)抽象化レイヤである パーサーを引く。
AndroidおよびAndroid以外のJavaプラットフォームでは、プルパースはおそらく(高速および低メモリオーバーヘッドの両方で)最も優れた解析方法の1つです。残念ながら、プルパーサーに対して直接コーディングすると、他のXML解析コード(SAXなど)のように見えます。例外ハンドラ、パーサー状態、エラーチェック、イベント処理、値解析などがあります。
SJXPあなたは要素の文書でXPathのような「パス」を定義することができますされないか、値のような、よりたい属性:
/RSS /チャネル/タイトル
をし、それが意志そのルールが一致したときに値とともにコールバックを呼び出します。 APIは本当に単純であり、名前空間で修飾された要素が解析しようとしている場合は、それを直感的にサポートしています。
標準パーサーのコードは、この(RSS2フィードのタイトルを解析例)のようなものになります。
IRule titleRule = new DefaultRule(Type.CHARACTER, "/rss/channel/title") {
@Override
public void handleParsedCharacters(XMLParser parser, String text) {
// Store the title in a DB or something fancy
}}
を次に、あなただけのXMLParserインスタンスを作成し、それをあなたはそれがしたいすべてのルールを与えます注意:
XMLParser parser = new XMLParser(titleRule);
parser.parse(xmlStream);
そして、そうです。パーサーは、ルールが一致するたびにハンドラメソッドを呼び出します。必要に応じてparser.stop()を呼び出すと、いつでも解析を停止できます。
また、一致する名前空間の要素と属性が一致するのは簡単ですが、パス内の要素の名前の前に角括弧で囲んだ名前空間URIを追加するだけです。
たとえば、RSSフィードの要素を欲しがっているので、どの言語になっているかを知ることができます(ref:http://web.resource.org/rss/1.0/modules/dc/)。その 'language'要素に固有の名前空間URIを 'dc'という接頭辞を付けて使用すると、ルールパスは次のようになります。
/rss/channel/[http://purl.org/ dc/elements/1.1 /] language
名前空間修飾属性についても同様です。
構文解析プロセスに追加するオーバーヘッドは、XMLドキュメントの各場所でのO(1)ハッシュ検索と、XML文書の各場所での数百バイト(おそらく1k)です。パーサ。
このライブラリは(プラットフォームが既にorg.xmlpull implを提供しているため)追加の依存関係なしにAndroid上で動作し、他のJavaランタイムではXPP3依存関係を追加して動作します。
このライブラリは、すべての言語でフィードXMLのあらゆる種類のカスタムプルパーサーを作成し、(実際には)この実際の基本的なパラダイムに分解する約90%の構文解析を実現した結果です。
私はあなたが便利だと思います。
を可能にするDOMの上に余分な層である。この
http://xml.jcabi.com/
を試すことができます。 – brimborium
(小)XML構成ファイルの解析のみに興味がある場合は、[XPath](http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html)を参照することをお勧めします。私は通常、非常に簡単にアクセスできるので、それを使用します。あなたが大規模なXMLファイルで作業している場合、パフォーマンスは悪化します。 – brimborium