DOM: 【補足】XMLデータが正しくない場合 SAXException

2007年06月17日(日)更新


■XMLデータが正しくない場合

たけち: これまでは、読み込んだXMLデータが正しいものとして考えてきたよね。

さらら: えぇ、そうだわね。もし違っていたらどうしていいか困っちゃうわ。

たけち: 今回は、読み込んだXMLデータが正しくない場合はどうなるのかを見ておこうね。XMLデータが正しくない場合には、XMLファイルのパースのときに、SAXExceptionという例外が発生するんだ。

さらら: えっ、・・・・・?

たけち: 簡単にXMLファイルのパースのときの、SAXException例外が発生したときの処理を示しておこうね。

さらら: うん。


XMLファイルのパース時にSAXExceptionが発生

sample3.xmlのDOMツリー


■正しくないサンプルXMLデータ

たけち: じゃ、今回は、正しくないサンプルXMLデータとして次のsample7.xmlファイルを使うね。

正しくないサンプルXMLデータ sample7.xml

<?xml version="1.0" encoding="UTF-8" ?>
<error_sample>
<child>子1です
<child>子2です</child>
<child>子3です</child>
</error_sample>

さらら: 最初のchildの終了タグが無いのね。


■DOMサンプルプログラム(7) SAXExceptionの処理

たけち: じゃ、次に今回のDOMサンプルプログラム(6)のソースコードを載せておくね。

さらら: はい。

DOMサンプルプログラム(7) DOMSample7.java
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package dom.study.sample_1;

import java.io.IOException;
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

public class DOMSample7 {

  public static void main(String[] args) {	
		
    String file = args[0];

    try {
			
      DOMParser parser = new DOMParser();      // パーサの生成
      parser.parse(file);                      // XMLファイルのパース
			
      Document document = parser.getDocument();   // DOCUMENTノードの取得
			
      if (document.hasChildNodes()) {      // 子ノードがある場合
        Node node = document.getFirstChild();  // DOCUMENTノードの最初の子ノード
				
        NamedNodeMap attrs = node.getAttributes();  // 要素ノードの属性
				
        if (attrs!=null) {
					
          for (int index=0;index<attrs.getLength();index++) {
            Node attr = attrs.item(index);  // 属性ノード
            System.out.print("属性名 = " + attr.getNodeName()); // 属性の名前
            System.out.println(", 値 = " + attr.getNodeValue()); // 属性の値
          }
        }		
			
      } else {
          System.out.println("DOCUMENTノードに子ノードがありません。");
      }
				
    } catch (SAXException e) {		
        System.out.println("***** 読み込んだXMLデータが正しくありません。");
        e.printStackTrace();
      } catch (IOException e) {			
        e.printStackTrace();
      }
  }
}

さらら: えっ〜と。。。41行目から44行目までで、SAXExceptionが発生したときの処理をしているのね。

たけち: そう、そうだね。だいたいわかるよね。

さらら: う〜ん、まぁまぁかな。。。(^ ^;


■DOMSample7の実行例(sample7.xmlの読み込み)

たけち: じゃ、sample7.xmlファイルを指定して、DOMSample7プログラムを実行させてみよう。実行結果は次のようになるよ。

DOMSample7プログラム実行例: sample7.xmlファイルを読み込み

さらら: 「***** 読み込んだXMLデータが正しくありません。」が表示されているわ。

たけち: それと、
The element type "child" must be terminated by the matching end-tag "</child>".
が表示されているのが分かるよね。

さらら: あっ、そうね。これでどこが悪いかが分かるわね。

たけち: じゃ、SAXExceptionについての補足はこれでおしまい。おつかれさま。

さらら: あっ、は〜い。ありがとね。

→ 次回は、XMLデータを作成する(1)です。....... (^ ^;


たのしいXMLのインデックス