当初、XML 言語は HTML 言語の代替としてのみ意図されていましたが、言語が開発および改良され続けるにつれて、拡張可能なマークアップ言語や厳密な構文の使用機能など、その利点がますます認識されてきています。意味のあるマークアップ、コンテンツの保存と表示の分離、その他の利点により、この言語は誕生した時から優れたものになることが運命づけられていました。 XML 言語は、W3C 標準になった後、急速な発展期に入りました。もちろん、その独自の一連の利点により、ソフトウェア業界の開発テクノロジとして Java も急速に支持されるようになりました。それに応じて、XML をサポートするさまざまなツールが登場しています。この記事では、この観点から Java で XML を処理するためのいくつかの主流のテクノロジを紹介します。
プログラマが XML を処理しやすくするために、Java にはどのような優れたクラス ライブラリとツールがあるのでしょうか?
3 つの XML 解析方法の紹介: 有名な DOM
DOM は、XML を処理するための W3C 標準 API であり、Java だけでなく、JavaScript、PHP、その他の言語の基礎となっていると言っても過言ではありません。この標準は、MS.NET などで最も広く使用されている XML 処理方法です。もちろん、より強力な機能を提供するために、Java には JDOM、DOM4J などの DOM 用の直接拡張ツール クラスが多数あります。これらは、多くの Java プログラマにとって馴染みのあるものであり、基本的には DOM インターフェイス関数の拡張であり、維持されています。 API の特性により、多くのオリジナルの DOM プログラマは、他の 2 つの方法を何の障害もなく使いこなすことができ、その直感的で操作が簡単なメソッドは、大多数の Java プログラマに深く愛されています。
グリーンで環境に優しいSAX
SAX の出現には、特別なニーズがあるのはなぜでしょうか。SAX が環境に優しいと言われているのは、SAX が使用するシステム リソースが最小限であり、XML 処理のサポートを提供するための最速の解析方法だからです。 しかし、それに付随する煩雑な検索方法はプログラマにとって多くの問題を引き起こし、しばしば頭痛の種となると同時に、XPath クエリ機能のサポートは人々に好き嫌いを分かれさせます。
あいまいなダイジェスター: XML の JavaBeans 化
Digester は、Apache Foundation のオープン ソース プロジェクトです。著者の理解は、Struts フレームワークの研究から来ています。主要なオープン ソース フレームワークの設計を理解したい、あるいは強力なフレームワークを自分で作成したいと考えているプログラマーはたくさんいますか? XML 言語でマークされたさまざまなフレームワーク設定ファイルを解析するために、フレームワークの下部でどのようなテクノロジが使用されているのか?という問題に遭遇するでしょう。 DOM の解析には時間がかかり、SAX の解析は煩雑であり、各解析のシステム オーバーヘッドが高すぎるため、この情報を読み込むには XML 構造に対応する JavaBeans を使用する必要があると誰もが考え、Digester が誕生しました。この登場により、XML を JavaBean オブジェクトに変換するニーズに便利な操作インターフェイスがもたらされ、より類似したニーズがより完璧なソリューションを得ることができるようになり、プログラマはそのような面倒な解析手順を自分で実装する必要がなくなりました。同時に、SUN は XML と JavaBean の変換ツール クラス JAXB も開始しました。興味のある読者は、それについて自分で学ぶことができます。
Java dom による XML 解析の例を見てみましょう。
インポート java.io.*; インポート org.xml.sax.SAXException; パブリック クラス Xml { public static void main(String[] args)ファクトリー = DocumentBuilderFactory.newInstance(); 試してください {DocumentBuilder ビルダー = Factory.newDocumentBuilder(); builder.parse(new File("E://work//test//xml1.xml")); NodeList nl = doc.getElementsByTagName("book"); for (int i = 0; i < nl.getLength( ); i++) { System.out.println(nl.item(i).getAttributes().item(0)); System.out.println(doc.getElementsByTagName("title").item(i) .getFirstChild().getNodeValue()); System.out.println(doc.getElementsByTagName("title").item(i) .getAttributes ().アイテム(0)); System.out.println(doc.getElementsByTagName("作者").item(i) .getFirstChild().getNodeValue()); System.out.println(doc.getElementsByTagName("年").item(i) .getFirstChild ().getNodeValue()); System.out.println(doc.getElementsByTagName("price").item(i) .getFirstChild().getNodeValue()); System.out.println(); } } catch (ParserConfigurationException e) { e.printStackTrace() ; } キャッチ (SAXException e) { e.printStackTrace() } キャッチ (IOException e); e.printStackTrace(); } }
XML:
<bookstore> <book category="COOKING"> <title lang="ja">まいにちイタリア語</title> <author>ジャーダ デ ラウレンティス</author> <year>2005</year> <price>30.00</price > </book> <book category="CHILDREN"> <title lang="ja">ハリー・ポッター</title> <著者>J・K・ローリング</著者> <年>2005</年> <価格>29.99 </価格> </book> <book category="WEB"> <title lang="ja">ラーニング XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95< /価格> </book> </bookstore>
結果:
category="COOKING"Everyday Italianlang="en"Giada De Westerniis200530.00category="CHILDREN"Harry Potterlang="en"J K. Rowling200529.99category="WEB"Learning XMLlang="en"Erik T. Ray200339.95