634 - JAXP - DOM - スペースをDOMツリーに取り込まないAdvertisementスペースを要素として取り込むDOMツリー
インデントしてあるXML文章からDOMツリーを生成すると、スペースやタブがDOMツリーの要素として取り込まれてしまう(例1参照)
例1:スペースを含むDOMツリーbooklist.xml
<?xml version="1.0" ?>
<booklist>
<book>英会話の本</book>
<book>政治の本</book>
</booklist>
DOMツリーを生成するプログラム(ReadBookList.java)
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class ReadBookList {
public static void main(String[] args){
try{
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbFactory.newDocumentBuilder();
Document doc = builder.parse("booklist.xml");
// ルート要素の取得
Element root = doc.getDocumentElement();
// ルート要素以下のノードを取得
NodeList list = root.getChildNodes();
// 表示
for(int i = 0; i < list.getLength(); i++){
System.out.println("[" + i + "]" + list.item(i));
}
}catch(Exception e){
e.printStackTrace();
System.exit(1);
}
}
}
結果 [0] [1]結果から、空白のノードも作成されていることがわかる。 空白を読み込まない
空白を無視するためには二つの手順を踏む必要がある。XMLにDTDを指定する必要があるので、プログラム側だけでは対応することができない。
dtd指定したbooklist.xml
<?xml version="1.0" ?>
<!DOCTYPE booklist [
<!ELEMENT booklist (book)*>
<!ELEMENT book (#PCDATA)>
] >
<booklist>
<book>英会話の本</book>
<book>政治の本</book>
</booklist>
続いてDOMツリーを作成するDocumentBuilderFactoryに対して空白を無視するよう指示を与える。これにはsetIgnoringElementContentWhitespaceメソッドを利用する。
import javax.xml.parsers.*;
import org.w3c.dom.*;
public class ReadBookList {
public static void main(String[] args){
try{
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
// 空白を無視
dbFactory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = dbFactory.newDocumentBuilder();
Document doc = builder.parse("booklist.xml");
// ルート要素の取得
Element root = doc.getDocumentElement();
// ルート要素以下のノードを取得
NodeList list = root.getChildNodes();
// 表示
for(int i = 0; i < list.getLength(); i++){
System.out.println("[" + i + "]" + list.item(i));
}
}catch(Exception e){
e.printStackTrace();
System.exit(1);
}
}
}
結果 [0]空白部分がツリーに取り込まれていない。 Advertisement |
ショートカット・634・634ブログ ・このカテゴリのトップページに戻る ・Incubator(Pukiwiki) ・634ラボ UIコレクションギャラリー ZO-3ジェネレーター サイト検索Y!ログール |