XMLの構造

http://d.hatena.ne.jp/cepoc/20080118/1200634405
確かに要素か属性かはよく悩むなぁ。「基本的に属性。上記特性が必要な時だけ要素にすべき。」はよく分かりやすい原則のように思います。でも、属性って表示するのそんなに難しかったかな。要素で扱う便利さはよく分かりますが、そんなに表示が簡単だったっけ。ということで、データとってくるプログラムちょっと書いてみた。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
// XML文書をDOMに読込む
Document inputDoc;
inputDoc = db.parse(new FileInputStream("ファイル名"));
Node inputRoot = inputDoc.getDocumentElement();
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
NodeList nodes = (NodeList) xpath.evaluate("「//要素名」を入れる場合", inputRoot,
		XPathConstants.NODESET);
//引っかかったものが複数あると仮定
for (int i = 0; i < nodes.getLength(); i++) {
	Node n = nodes.item(i);
	//要素のデータはこう取れる。
	String youso = n.getTextContent();
	//属性のデータはこう取れる。
	Node n2 = n.getAttributes().getNamedItem("属性名");
	String zokusei = n2.getTextContent();
	//属性の名前を知らない場合に何とかがんばる方法
	NamedNodeMap temp = n.getAttributes();
	for(int j = 0; j < temp.getLength(); j++){
		Node ganbarisugi = temp.item(j);
		//以下、Nodeをたどっていく
	}	

xpath.evaluate("「//要素名/@属性名」を入れる場合", inputRoot, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
	Node n = nodes.item(i);
	String zokusei = n.getTextContent();

一応、属性の場合、属性名が分からなくてもとってこれるメリットがありますね。でも、あれだ。何でもかんでもNode扱いはちょっとメンドクサイ。これのせいでメモリを使いすぎるんだちくしょう。
属性名が分かっていれば、ばっととってこれるのでそれほど不便じゃない気もします。要素も、ある要素の子供であることが分かれば要素名が必ずしも必要にならないのは改めて理解。


ここまで書いてふと考える。もしかして、表示ってブラウザのあれのことだったり、JavaScriptだったり、別のことだったのかな〜w
だとすると、確かに属性は不便ですね。うんw


追記:書いた意味がほとんどなくてかなり涙目なんですが、まあ、メモとしては役に立つのでおいておこうかと。