Xerces Java Paser 1.4.4 (Apach XML Project)

XML Square の「第1回:DOMの基本」を参考にして DOM の parse を行う.
デベロッパーズコーナー:DOMプログラミング講座 I(5) - XML Squareに掲載されている Books.xml をコピーして,パースしてみた.

<?xml version="1.0"?>
<!DOCTYPE books SYSTEM "books.dtd">
<books>
  <book>
    <title>Nine Stories</title>
    <publish_year>1953</publish_year>
    <author country="Germany" sex="man">
      <name>J.D.Salinger</name>
    </author>
  </book>
</books>

サンプルプログラムを動かすと,次のようにこける.

ルートノードの種類は:1
ルートノードの名前は:books
ルートノードの子供の名前は:#text
java.lang.NullPointerException:例外発生

XMLファイルの空白や改行もひとつのノードとみなしてしまうため、とりあえず実際のXMLファイルには改行や空白を入れないほうが作業を進めやすいかもしれません。」と注意書きがあるから,改行などを全て消して,次のようにしてみた(読みづらいが・・・).

<?xml version="1.0"?><!DOCTYPE books SYSTEM "books.dtd"><books><book><title>Nine Stories</title><publish_year>1953</publish_year><author country="Germany" sex="man"><name>J.D.Salinger</name></author></book></books>

すると,次のようにうまく動いてくれた.

ルートノードの種類は:1
ルートノードの名前は:books
ルートノードの子供の種類は:1
ルートノードの子供の名前は:book
bookの3番目の子要素の名前は:author

現実の XML ファイルやネットから取得する XML データには改行が入っている場合も多いから,改行などをうまく処理する必要がある.さて,予め改行等を取り除いたデータを parser に渡すか,プログラム側で対処するか・・・後者の方が適切だし,getNodeType() により判別すればよいでしょう.