感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

dom4jを使って、JavaでXMLファイルを出力してみる。その他、XPathの詳細表記について。

スポンサーリンク

前回のブログからの続き。
http://d.hatena.ne.jp/sho322/20130710/1373465211

XPathで詳細にノードを記述する

以下の2つは同じ意味である。
詳細表記

child::cars/child::car[position()=2]

簡易表記

cars/car[2]

軸(axis)は基準となるノードとの関係を示す。
カレントノードの「子」を選びたい場合は、「child::」と指定する。

[軸][ノードテスト][述語]

という書き方をする。
ノードテストは、ノードの名前または、種類を指定する。
person要素を指定したい時は、personと書けばよい。

軸は以下の通り。

詳細表記 意味
self:: カレントノード自身
child::
parent::
descendant:: 子孫
ancestor:: 先祖
descendant-or-self:: 子孫とカレントノード自身
ancestor-or-self:: 先祖とカレントノード自身
preceding-sibling::
following-sibling::
preceding:: カレントノードの前
following:: カレントノードの後
attribute:: 属性
namespace:: 名前空間

ノードテストは以下の通り。

表記 ノードの種類
node() すべてのノード
comment() コメントノード
text() テキストノード
processing-instruction() 処理命令ノード

dom4jを使って、XMLドキュメントを出力するサンプル

package dom4jsample;

import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Dom4jSample {
	public static void main(String[] args) {
		SAXReader reader = new SAXReader();
		try {
			Document document = reader.read("C:\\tmp\\member2.xml");
			List nodes = document.selectNodes("/persons/person/name[text()='sho322']/following-sibling::*");

			for(Iterator i = nodes.iterator(); i.hasNext();) {
				Node node = (Node) i.next();
				System.out.println(node.getText());
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
}

このプログラムを実行すると、「member2.xml」というファイルが出力される。

<?xml version="1.0" encoding="UTF-8"?>
<persons><person id="001"><name>sho322</name><age>28</age><job>programmer</job></person></persons>

前回の記事で書いたプログラムを実行するとちゃんと読み込むことができる。

勉強した本

やさしいXML 第3版

やさしいXML 第3版

現場で使えるJavaライブラリ

現場で使えるJavaライブラリ

高橋さんの本は、基礎を身に付けるために、いつも何度も復習している。
ライブラリの本は、基礎の土台があって、その上で便利に使うために参考になる。

感謝のプログラミング

今回で感謝のプログラミングは【519時間目】
10000時間まで、あと【9481時間】