Apcoordinator ユーザーズガイド |
目次 |
第2部 Apcoordinatorコアの機能 | > 第5章 XMLデータの利用 |
XMLデータBeanはXMLデータを扱うためのデータBeanです。XMLデータBeanのクラスとしてcom.fujitsu.uji.xml.XmlDataBeanクラスを使います。XMLデータBean内部では、XMLデータをオブジェクトのツリー(木)として保持しています。このツリーをXMLツリーと呼びます。XMLツリーの各ノードはXMLの要素に対応し、XMLツリーのルートはXMLのルート要素に対応します。
XMLデータBeanが保持するXMLツリーのルートに対応する要素を、XMLデータBeanのルート要素と呼びます。上の図では、catalog要素がXMLデータBeanのルート要素です。
XmlDataBeanクラスのコンストラクタによって空のXMLデータを持つXMLデータBeanが作成されます。これにXMLデータを与えるには、ファイルなどからXMLデータを読み込みます。
XMLデータを読み込むには、XmlDataBeanクラスのloadFromメソッドを使用します。読み込み元の指定には、ファイル、InputStream、URI、org.xml.sax.InputSourceのいずれかを指定します。
XMLデータBean内のXMLデータを保存するにはXmlDataBeanのsaveToメソッドを使用します。保存先としてファイルやOutputStreamを指定できます。文字符号化方式の指定も可能です。
public void startup(DispatchContext context) { try { // ロードするファイルを表すFileオブジェクトを作成 ServletContext sc = ((HttpDispatchContext)context).getServletContext();
String root = sc.getRealPath("/");
File file = new File(root, "/WEB-INF/user.xml");
// XMLデータBeanを作成 XmlDataBean xmlBean = new XmlDataBean(); // XMLデータを読み込み BufferedInputStream in = new BufferedInputStream(new FileInputStream(file)); xmlBean.loadFrom(in); // XMLデータを保存 BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file)); xmlBean.saveTo(out,"iso-2022-jp"); context.setResponseBean("body",xmlBean); } catch (Exception e) {
e.printStackTrace();
}
}
保存時に文書型宣言を指定するには、setDoctypeメソッドを使用してください。また、改行コードの種類、空白記号の追加、省略された属性の追加の有無を指定するにはsetWriteOptionメソッドを使用してください。
XMLデータBeanのメソッドを使ってデータの参照、更新、追加および削除が可能です。
XMLデータを操作する際は操作対象となるデータをXPathで指定します。XPathは、XMLデータ内のある要素を基点とし目的の要素までの経路を記述することによってデータを指定する方法です。
XPathの記述例はXPathの概略を参照してください。
XMLデータの参照には、文字列として参照する方法と、XMLデータBeanとして参照する方法があります。
String text = xmlBean.getText("item/name");
XmlDataBean subBean = xmlBean.getSubBean("item");
getSubBeanで取得したXMLデータBeanは、元のXMLツリーをコピーせずに共有します。したがって、getSubBeanで得られたXMLデータBean内のデータを更新すると、元のXMLデータBeanも更新されます。
XPathで指定されるデータには、単純要素、複合要素、混合要素、属性、それらのデータの集合があります。XPathで指定したデータの種類とgetText、getSubBeanの返値の関係は以下のようになります。
(上記表の「null」は、メソッドがnullを返すことを意味します。)
単純要素 複合要素 混合要素 属性 集合 getText 要素の内容 null null 属性値 先頭の要素または属性のみを参照して左記の条件に従う getSubBean null その要素をルート要素とするXMLデータBean null null 先頭の要素のみを参照して左記の条件に従う
XMLデータ中の要素は、その内容として子要素やテキストを持つかどうかによって、単純要素、複合要素、混合要素に分類されます。
- 単純要素: 子要素を持ちません。テキストは持つことができます。
- 複合要素: 複数の子要素を持ちます。空白、改行以外のテキストは持つことができません。
- 混合要素: 複数の子要素と、テキストを持ちます。
以下のXMLデータで、titleは単純要素、headerは複合要素、bodyは混合要素です。
<doc> <header> <title>XML連携機能マニュアル</title> <author>富士通太郎</author> </header> <body> 本マニュアルでは、 <bold>Apcoordinator</bold> の <bold>XML連携機能</bold> について解説します。 </body> </doc>
単純要素の内容を指定した文字列で更新するには、setTextメソッドを使います。
xmlBean.setText("item/name", "白ワイン");
XPathで属性を指定した場合は、属性値が更新されます。集合の場合はその先頭のデータが更新の対象になります。複合要素、混合要素には使用できません。
XPathで指定された要素が存在しない場合、指定された要素がXMLに追加されます。ただしXPathが以下の条件のいずれかを満たす場合に限ります。
子要素(単純要素)を追加するには、appendメソッドを使います。
xmlBean.append("item", "name", "白ワイン");
item要素の子要素としてname要素が末尾に追加されます。name要素の内容は“白ワイン”となります。
子要素(単純要素)を挿入するには、insertメソッドを使います。
xmlBean.insert("item", "author", "title", "XML連携機能マニュアル");
item要素の子要素としてtitle要素がauthor要素の直前に挿入されます。title要素の内容は“XML連携機能マニュアル”となります。
要素を削除するには、removeメソッドを使います。
xmlBean.remove("item/name");
XPathで指定した要素が削除されます。
XMLデータBeanを複製するには、cloneメソッドを使用します。複製されたXMLデータBeanに対する更新処理は、複製元のデータには反映されません。
目次 |