DTD
日本語 | 文書型定義 |
英語 | Document Type Definition |
ふりがな | でぃーてぃーでぃー |
フリガナ | ディーティーディー |
XMLスキーマ言語のひとつ。
XMLの構造をチェックするためのファイル(XMLスキーマ)の言語仕様のひとつ。
「<!ELEMENT 構造>」というタグを用いて、XMLの構造を指定する。
たとえば、以下のように記述する。
<!ELEMENT test_xml (test1,test2)>
<!ELEMENT test1 (#PCDATA)>
<!ELEMENT test2 (test2_child)>
<!ELEMENT test2_child (#PCDATA)>
「構造」の箇所は、「タグA (タグB)」となっていれば、「タグA内にタグBが入る」、つまり「<タグA><タグB></タグB></タグA>」という構造となることを示す。
また、「タグA (#PCDATA)」となっていれば、「タグA内に文字列が入る」、つまり「<タグA>文字列</タグA>」という構造となることを示す。
このようにして、XMLのタグの構造を指定する。
このDTDは通常ファイルとして保存し、拡張子を「.dtd」とする。このファイルをローカルファイルとして置くか、インターネット上で公開する。
XMLでは、<!DOCTYPE>タグでDTDを指定する。
たとえば、上記DTDファイルをD:/sample.dtdに置いた場合、XMLでは以下のように記述する。
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE test_xml SYSTEM "file:///D:/sample.dtd">
<test_xml>
<test1>テストです</test1>
<test2>
<test2_child>テストですって</test2_child>
</test2>
</test_xml>
「<!DOCTYPE ルートタグ SYSTEM "file:///ファイルパス">」という形式でDTDファイルを指定する。
このXMLがDTDに適合していない場合にはエラーとなる。
また、インターネット上に公開されたDTDを参照する場合、XMLに次のように記述する。
<?xml version="1.0" encoding="Windows-31J"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<!-- webapps/sample-servlet/WEB-INF/web.xml -->
<web-app>
</web-app>
「<!DOCTYPE ルートタグ PUBLIC "DTD名" "URL">」という形式でDTDを指定する。
web.xmlの構造を定義したDTDはhttp://java.sun.com/dtd/web-app_2_3.dtdに置かれており、これを参照したものである。
Javaでは、DocumentBuilderFactoryインターフェイスのsetValidating()メソッドにtrueを渡すことで、DTDによるチェックを行う。
ただし、エラー等が発生していたとしても例外が投げられるわけではなく、標準エラー出力にエラー内容が出力されるだけである。エラーに対処する場合には、org.xml.sax.ErrorHandlerインターフェイスの実装クラスを作り、オーバーライドしたメソッドでエラー処理を行うようにし、これをDocumentBuilderインターフェイスのsetErrorHandler()メソッドに渡してセットする必要がある。
XMLスキーマ言語には様々な種類があるが、現在最も広く使用されているのはDTDである。
そのため、DTDを知っておけばXMLスキーマについてはほぼ問題ないと思われる。
XMLの構造をチェックするためのファイル(XMLスキーマ)の言語仕様のひとつ。
「<!ELEMENT 構造>」というタグを用いて、XMLの構造を指定する。
たとえば、以下のように記述する。
<!ELEMENT test_xml (test1,test2)>
<!ELEMENT test1 (#PCDATA)>
<!ELEMENT test2 (test2_child)>
<!ELEMENT test2_child (#PCDATA)>
「構造」の箇所は、「タグA (タグB)」となっていれば、「タグA内にタグBが入る」、つまり「<タグA><タグB></タグB></タグA>」という構造となることを示す。
また、「タグA (#PCDATA)」となっていれば、「タグA内に文字列が入る」、つまり「<タグA>文字列</タグA>」という構造となることを示す。
このようにして、XMLのタグの構造を指定する。
このDTDは通常ファイルとして保存し、拡張子を「.dtd」とする。このファイルをローカルファイルとして置くか、インターネット上で公開する。
XMLでは、<!DOCTYPE>タグでDTDを指定する。
たとえば、上記DTDファイルをD:/sample.dtdに置いた場合、XMLでは以下のように記述する。
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE test_xml SYSTEM "file:///D:/sample.dtd">
<test_xml>
<test1>テストです</test1>
<test2>
<test2_child>テストですって</test2_child>
</test2>
</test_xml>
「<!DOCTYPE ルートタグ SYSTEM "file:///ファイルパス">」という形式でDTDファイルを指定する。
このXMLがDTDに適合していない場合にはエラーとなる。
また、インターネット上に公開されたDTDを参照する場合、XMLに次のように記述する。
<?xml version="1.0" encoding="Windows-31J"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<!-- webapps/sample-servlet/WEB-INF/web.xml -->
<web-app>
</web-app>
「<!DOCTYPE ルートタグ PUBLIC "DTD名" "URL">」という形式でDTDを指定する。
web.xmlの構造を定義したDTDはhttp://java.sun.com/dtd/web-app_2_3.dtdに置かれており、これを参照したものである。
Javaでは、DocumentBuilderFactoryインターフェイスのsetValidating()メソッドにtrueを渡すことで、DTDによるチェックを行う。
ただし、エラー等が発生していたとしても例外が投げられるわけではなく、標準エラー出力にエラー内容が出力されるだけである。エラーに対処する場合には、org.xml.sax.ErrorHandlerインターフェイスの実装クラスを作り、オーバーライドしたメソッドでエラー処理を行うようにし、これをDocumentBuilderインターフェイスのsetErrorHandler()メソッドに渡してセットする必要がある。
XMLスキーマ言語には様々な種類があるが、現在最も広く使用されているのはDTDである。
そのため、DTDを知っておけばXMLスキーマについてはほぼ問題ないと思われる。
参考サイト
<!-- D:/sample.dtd -->
<!-- UTF-8で保存してください。 -->
<!ELEMENT test_xml (test1,test2)> <!-- test_xmlタグ内にtest1タグとtest2タグがある、という意味です。 -->
<!ELEMENT test1 (#PCDATA)> <!-- test1タグ内に文字列がある、という意味です。 -->
<!ELEMENT test2 (test2_child)> <!-- test2タグ内にtest2_childタグがある、という意味です。 -->
<!ELEMENT test2_child (#PCDATA)> <!-- test2_childタグ内に文字列がある、という意味です。 -->
// Sample.java
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class Sample
{
public static void main( String[] args )
{
// 例1:XMLがDTD通りの場合(DTDをXML内に記述)
ByteArrayInputStream byteArrayInputStream = null;
try
{
// XMLの文字コードです。
final String XML_TEXT_ENCODE = "UTF-8";
// XMLです。DTD通りのXMLです。
final String XML_TEXT
= "<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<!DOCTYPE test_xml ["
+ " <!ELEMENT test_xml (test1,test2)>"
+ " <!ELEMENT test1 (#PCDATA)>"
+ " <!ELEMENT test2 (test2_child)>"
+ " <!ELEMENT test2_child (#PCDATA)>"
+ "]>"
+ "<test_xml>\n"
+ " <test1>テストです</test1>\n"
+ " <test2>\n"
+ " <test2_child>テストですって</test2_child>\n"
+ " </test2>\n"
+ "</test_xml>\n"
;
// この文字列を、UTF-8形式のbyte型配列として取り出します。
byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE );
// そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// パーサーを作ります。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating( true );
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// パーシングします。
Document document = documentBuilder.parse( byteArrayInputStream );
System.out.println( "1:パーシング完了。" );
// 1:パーシング完了。
}
catch( UnsupportedEncodingException e )
{
// StringクラスのgetBytes()メソッドで、存在しない文字コードを
// 指定された場合にこの例外が投げられます。
e.printStackTrace();
}
catch( ParserConfigurationException e )
{
// DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの
// 呼び出し中に失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( SAXException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( IOException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// 例2:XMLがDTD通りではない場合(DTDをXML内に記述)
byteArrayInputStream = null;
try
{
// XMLの文字コードです。
final String XML_TEXT_ENCODE = "UTF-8";
// XMLです。DTD通りのXMLです。
final String XML_TEXT
= "<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<!DOCTYPE test_xml ["
+ " <!ELEMENT test_xml (test1,test2)>"
+ " <!ELEMENT test1 (#PCDATA)>"
+ " <!ELEMENT test2 (test2_child)>"
+ " <!ELEMENT test2_child (#PCDATA)>"
+ "]>"
+ "<test_xml>\n"
+ " <test>テストです</test>\n"
+ "</test_xml>\n"
;
// この文字列を、UTF-8形式のbyte型配列として取り出します。
byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE );
// そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// パーサーを作ります。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating( true );
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// パーシングします。
Document document = documentBuilder.parse( byteArrayInputStream );
// Warning: validation was turned on but an org.xml.sax.ErrorHandler was not
// set, which is probably not what is desired. Parser will use a default
// ErrorHandler to print the first 10 errors. Please call
// the 'setErrorHandler' method to fix this.
// Error: URI=null Line=3: 要素 "test_xml" ではここに "test" を指定することを許可されません。
// Error: URI=null Line=3: 要素タイプ "test" は宣言されていません。
// Error: URI=null Line=4: 要素 "test_xml" には追加属性が必要です。
// このように、XMLがDTDと一致しないため、エラーとなります。
// ただし、これは「標準エラー出力」に出力されるだけですので、
// 実際にエラー処理をする場合には、org.xml.sax.ErrorHandlerインターフェイスの
// 実装クラスを、DocumentBuilderインターフェイスのsetErrorHandler()メソッドに
// 渡して、ErrorHandlerインターフェイスの実装クラスでエラー処理をする必要が
// あります。
System.out.println( "2:パーシング完了。" );
// 2:パーシング完了。
}
catch( UnsupportedEncodingException e )
{
// StringクラスのgetBytes()メソッドで、存在しない文字コードを
// 指定された場合にこの例外が投げられます。
e.printStackTrace();
}
catch( ParserConfigurationException e )
{
// DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの
// 呼び出し中に失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( SAXException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( IOException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// 例3:XMLがDTD通りの場合(DTDローカルファイル)
byteArrayInputStream = null;
try
{
// XMLの文字コードです。
final String XML_TEXT_ENCODE = "UTF-8";
// XMLです。DTD通りのXMLです。
final String XML_TEXT
= "<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<!DOCTYPE test_xml SYSTEM \"file:///D:/sample.dtd\">\n"
+ "<test_xml>\n"
+ " <test1>テストです</test1>\n"
+ " <test2>\n"
+ " <test2_child>テストですって</test2_child>\n"
+ " </test2>\n"
+ "</test_xml>\n"
;
// この文字列を、UTF-8形式のbyte型配列として取り出します。
byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE );
// そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// パーサーを作ります。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating( true );
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// パーシングします。
Document document = documentBuilder.parse( byteArrayInputStream );
System.out.println( "3:パーシング完了。" );
// 3:パーシング完了。
}
catch( UnsupportedEncodingException e )
{
// StringクラスのgetBytes()メソッドで、存在しない文字コードを
// 指定された場合にこの例外が投げられます。
e.printStackTrace();
}
catch( ParserConfigurationException e )
{
// DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの
// 呼び出し中に失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( SAXException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( IOException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// 例4:XMLがDTD通りではない場合(DTDローカルファイル)
byteArrayInputStream = null;
try
{
// XMLの文字コードです。
String XML_TEXT_ENCODE = "UTF-8";
// XMLです。DTD通りではないXMLです。
final String XML_TEXT
= "<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<!DOCTYPE SAMPLE_DTD SYSTEM \"file:///D:/sample.dtd\">\n"
+ "<test_xml>\n"
+ " <test>テストです</test>\n"
+ "</test_xml>\n"
;
// この文字列を、UTF-8形式のbyte型配列として取り出します。
byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE );
// そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// パーサーを作ります。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating( true );
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// パーシングします。
Document document = documentBuilder.parse( byteArrayInputStream );
// Warning: validation was turned on but an org.xml.sax.ErrorHandler was not
// set, which is probably not what is desired. Parser will use a default
// ErrorHandler to print the first 10 errors. Please call
// the 'setErrorHandler' method to fix this.
// Error: URI=null Line=3: ルート要素タイプは "test_xml" ですが、"SAMPLE_DTD" と宣言されました。
// Error: URI=null Line=4: 要素 "test_xml" ではここに "test" を指定することを許可されません。
// Error: URI=null Line=4: 要素タイプ "test" は宣言されていません。
// Error: URI=null Line=5: 要素 "test_xml" には追加属性が必要です。
// このように、XMLがDTDと一致しないため、エラーとなります。
// ただし、これは「標準エラー出力」に出力されるだけですので、
// 実際にエラー処理をする場合には、org.xml.sax.ErrorHandlerインターフェイスの
// 実装クラスを、DocumentBuilderインターフェイスのsetErrorHandler()メソッドに
// 渡して、ErrorHandlerインターフェイスの実装クラスでエラー処理をする必要が
// あります。
System.out.println( "4:パーシング完了。" );
// 4:パーシング完了。
}
catch( UnsupportedEncodingException e )
{
// StringクラスのgetBytes()メソッドで、存在しない文字コードを
// 指定された場合にこの例外が投げられます。
e.printStackTrace();
}
catch( ParserConfigurationException e )
{
// DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの
// 呼び出し中に失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( SAXException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( IOException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// 例5:XMLがDTD通りの場合(DTDパブリック)
byteArrayInputStream = null;
try
{
// XMLの文字コードです。
String XML_TEXT_ENCODE = "UTF-8";
// XMLです。DTD通りではないXMLです。
final String XML_TEXT
= "<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<!DOCTYPE \n"
+ " web-app PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\"\n"
+ " \"http://java.sun.com/dtd/web-app_2_3.dtd\">\n"
+ "<web-app>\n"
+ " <servlet>\n"
+ " <servlet-name>サーブレット名</servlet-name>\n"
+ " <servlet-class>a.class</servlet-class>\n"
+ " </servlet>\n"
+ "</web-app>\n"
;
// この文字列を、UTF-8形式のbyte型配列として取り出します。
byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE );
// そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// パーサーを作ります。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating( true );
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// パーシングします。
Document document = documentBuilder.parse( byteArrayInputStream );
System.out.println( "5:パーシング完了。" );
// 5:パーシング完了。
}
catch( UnsupportedEncodingException e )
{
// StringクラスのgetBytes()メソッドで、存在しない文字コードを
// 指定された場合にこの例外が投げられます。
e.printStackTrace();
}
catch( ParserConfigurationException e )
{
// DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの
// 呼び出し中に失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( SAXException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( IOException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
}
}
<!-- UTF-8で保存してください。 -->
<!ELEMENT test_xml (test1,test2)> <!-- test_xmlタグ内にtest1タグとtest2タグがある、という意味です。 -->
<!ELEMENT test1 (#PCDATA)> <!-- test1タグ内に文字列がある、という意味です。 -->
<!ELEMENT test2 (test2_child)> <!-- test2タグ内にtest2_childタグがある、という意味です。 -->
<!ELEMENT test2_child (#PCDATA)> <!-- test2_childタグ内に文字列がある、という意味です。 -->
// Sample.java
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class Sample
{
public static void main( String[] args )
{
// 例1:XMLがDTD通りの場合(DTDをXML内に記述)
ByteArrayInputStream byteArrayInputStream = null;
try
{
// XMLの文字コードです。
final String XML_TEXT_ENCODE = "UTF-8";
// XMLです。DTD通りのXMLです。
final String XML_TEXT
= "<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<!DOCTYPE test_xml ["
+ " <!ELEMENT test_xml (test1,test2)>"
+ " <!ELEMENT test1 (#PCDATA)>"
+ " <!ELEMENT test2 (test2_child)>"
+ " <!ELEMENT test2_child (#PCDATA)>"
+ "]>"
+ "<test_xml>\n"
+ " <test1>テストです</test1>\n"
+ " <test2>\n"
+ " <test2_child>テストですって</test2_child>\n"
+ " </test2>\n"
+ "</test_xml>\n"
;
// この文字列を、UTF-8形式のbyte型配列として取り出します。
byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE );
// そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// パーサーを作ります。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating( true );
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// パーシングします。
Document document = documentBuilder.parse( byteArrayInputStream );
System.out.println( "1:パーシング完了。" );
// 1:パーシング完了。
}
catch( UnsupportedEncodingException e )
{
// StringクラスのgetBytes()メソッドで、存在しない文字コードを
// 指定された場合にこの例外が投げられます。
e.printStackTrace();
}
catch( ParserConfigurationException e )
{
// DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの
// 呼び出し中に失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( SAXException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( IOException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// 例2:XMLがDTD通りではない場合(DTDをXML内に記述)
byteArrayInputStream = null;
try
{
// XMLの文字コードです。
final String XML_TEXT_ENCODE = "UTF-8";
// XMLです。DTD通りのXMLです。
final String XML_TEXT
= "<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<!DOCTYPE test_xml ["
+ " <!ELEMENT test_xml (test1,test2)>"
+ " <!ELEMENT test1 (#PCDATA)>"
+ " <!ELEMENT test2 (test2_child)>"
+ " <!ELEMENT test2_child (#PCDATA)>"
+ "]>"
+ "<test_xml>\n"
+ " <test>テストです</test>\n"
+ "</test_xml>\n"
;
// この文字列を、UTF-8形式のbyte型配列として取り出します。
byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE );
// そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// パーサーを作ります。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating( true );
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// パーシングします。
Document document = documentBuilder.parse( byteArrayInputStream );
// Warning: validation was turned on but an org.xml.sax.ErrorHandler was not
// set, which is probably not what is desired. Parser will use a default
// ErrorHandler to print the first 10 errors. Please call
// the 'setErrorHandler' method to fix this.
// Error: URI=null Line=3: 要素 "test_xml" ではここに "test" を指定することを許可されません。
// Error: URI=null Line=3: 要素タイプ "test" は宣言されていません。
// Error: URI=null Line=4: 要素 "test_xml" には追加属性が必要です。
// このように、XMLがDTDと一致しないため、エラーとなります。
// ただし、これは「標準エラー出力」に出力されるだけですので、
// 実際にエラー処理をする場合には、org.xml.sax.ErrorHandlerインターフェイスの
// 実装クラスを、DocumentBuilderインターフェイスのsetErrorHandler()メソッドに
// 渡して、ErrorHandlerインターフェイスの実装クラスでエラー処理をする必要が
// あります。
System.out.println( "2:パーシング完了。" );
// 2:パーシング完了。
}
catch( UnsupportedEncodingException e )
{
// StringクラスのgetBytes()メソッドで、存在しない文字コードを
// 指定された場合にこの例外が投げられます。
e.printStackTrace();
}
catch( ParserConfigurationException e )
{
// DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの
// 呼び出し中に失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( SAXException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( IOException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// 例3:XMLがDTD通りの場合(DTDローカルファイル)
byteArrayInputStream = null;
try
{
// XMLの文字コードです。
final String XML_TEXT_ENCODE = "UTF-8";
// XMLです。DTD通りのXMLです。
final String XML_TEXT
= "<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<!DOCTYPE test_xml SYSTEM \"file:///D:/sample.dtd\">\n"
+ "<test_xml>\n"
+ " <test1>テストです</test1>\n"
+ " <test2>\n"
+ " <test2_child>テストですって</test2_child>\n"
+ " </test2>\n"
+ "</test_xml>\n"
;
// この文字列を、UTF-8形式のbyte型配列として取り出します。
byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE );
// そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// パーサーを作ります。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating( true );
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// パーシングします。
Document document = documentBuilder.parse( byteArrayInputStream );
System.out.println( "3:パーシング完了。" );
// 3:パーシング完了。
}
catch( UnsupportedEncodingException e )
{
// StringクラスのgetBytes()メソッドで、存在しない文字コードを
// 指定された場合にこの例外が投げられます。
e.printStackTrace();
}
catch( ParserConfigurationException e )
{
// DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの
// 呼び出し中に失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( SAXException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( IOException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// 例4:XMLがDTD通りではない場合(DTDローカルファイル)
byteArrayInputStream = null;
try
{
// XMLの文字コードです。
String XML_TEXT_ENCODE = "UTF-8";
// XMLです。DTD通りではないXMLです。
final String XML_TEXT
= "<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<!DOCTYPE SAMPLE_DTD SYSTEM \"file:///D:/sample.dtd\">\n"
+ "<test_xml>\n"
+ " <test>テストです</test>\n"
+ "</test_xml>\n"
;
// この文字列を、UTF-8形式のbyte型配列として取り出します。
byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE );
// そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// パーサーを作ります。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating( true );
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// パーシングします。
Document document = documentBuilder.parse( byteArrayInputStream );
// Warning: validation was turned on but an org.xml.sax.ErrorHandler was not
// set, which is probably not what is desired. Parser will use a default
// ErrorHandler to print the first 10 errors. Please call
// the 'setErrorHandler' method to fix this.
// Error: URI=null Line=3: ルート要素タイプは "test_xml" ですが、"SAMPLE_DTD" と宣言されました。
// Error: URI=null Line=4: 要素 "test_xml" ではここに "test" を指定することを許可されません。
// Error: URI=null Line=4: 要素タイプ "test" は宣言されていません。
// Error: URI=null Line=5: 要素 "test_xml" には追加属性が必要です。
// このように、XMLがDTDと一致しないため、エラーとなります。
// ただし、これは「標準エラー出力」に出力されるだけですので、
// 実際にエラー処理をする場合には、org.xml.sax.ErrorHandlerインターフェイスの
// 実装クラスを、DocumentBuilderインターフェイスのsetErrorHandler()メソッドに
// 渡して、ErrorHandlerインターフェイスの実装クラスでエラー処理をする必要が
// あります。
System.out.println( "4:パーシング完了。" );
// 4:パーシング完了。
}
catch( UnsupportedEncodingException e )
{
// StringクラスのgetBytes()メソッドで、存在しない文字コードを
// 指定された場合にこの例外が投げられます。
e.printStackTrace();
}
catch( ParserConfigurationException e )
{
// DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの
// 呼び出し中に失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( SAXException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( IOException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// 例5:XMLがDTD通りの場合(DTDパブリック)
byteArrayInputStream = null;
try
{
// XMLの文字コードです。
String XML_TEXT_ENCODE = "UTF-8";
// XMLです。DTD通りではないXMLです。
final String XML_TEXT
= "<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<!DOCTYPE \n"
+ " web-app PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\"\n"
+ " \"http://java.sun.com/dtd/web-app_2_3.dtd\">\n"
+ "<web-app>\n"
+ " <servlet>\n"
+ " <servlet-name>サーブレット名</servlet-name>\n"
+ " <servlet-class>a.class</servlet-class>\n"
+ " </servlet>\n"
+ "</web-app>\n"
;
// この文字列を、UTF-8形式のbyte型配列として取り出します。
byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE );
// そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
byteArrayInputStream = new ByteArrayInputStream( bytes );
// パーサーを作ります。
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating( true );
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// パーシングします。
Document document = documentBuilder.parse( byteArrayInputStream );
System.out.println( "5:パーシング完了。" );
// 5:パーシング完了。
}
catch( UnsupportedEncodingException e )
{
// StringクラスのgetBytes()メソッドで、存在しない文字コードを
// 指定された場合にこの例外が投げられます。
e.printStackTrace();
}
catch( ParserConfigurationException e )
{
// DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの
// 呼び出し中に失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( SAXException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
catch( IOException e )
{
// DocumentBuilderクラスのparse()メソッドの呼び出しで
// パーシングに失敗するとこの例外が投げられます。
e.printStackTrace();
}
finally
{
// 最後にclose()メソッドを呼んで後処理をします。
// また、これは必ず行うため、finally内で行います。
try
{
if( byteArrayInputStream != null )
{
byteArrayInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
}
}
<!-- D:/sample.dtd --> <!-- UTF-8で保存してください。 --> <!ELEMENT test_xml (test1,test2)> <!-- test_xmlタグ内にtest1タグとtest2タグがある、という意味です。 --> <!ELEMENT test1 (#PCDATA)> <!-- test1タグ内に文字列がある、という意味です。 --> <!ELEMENT test2 (test2_child)> <!-- test2タグ内にtest2_childタグがある、という意味です。 --> <!ELEMENT test2_child (#PCDATA)> <!-- test2_childタグ内に文字列がある、という意味です。 --> // Sample.java import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.xml.sax.SAXException; public class Sample { public static void main( String[] args ) { // 例1:XMLがDTD通りの場合(DTDをXML内に記述) ByteArrayInputStream byteArrayInputStream = null; try { // XMLの文字コードです。 final String XML_TEXT_ENCODE = "UTF-8"; // XMLです。DTD通りのXMLです。 final String XML_TEXT = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<!DOCTYPE test_xml [" + " <!ELEMENT test_xml (test1,test2)>" + " <!ELEMENT test1 (#PCDATA)>" + " <!ELEMENT test2 (test2_child)>" + " <!ELEMENT test2_child (#PCDATA)>" + "]>" + "<test_xml>\n" + " <test1>テストです</test1>\n" + " <test2>\n" + " <test2_child>テストですって</test2_child>\n" + " </test2>\n" + "</test_xml>\n" ; // この文字列を、UTF-8形式のbyte型配列として取り出します。 byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE ); // そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。 byteArrayInputStream = new ByteArrayInputStream( bytes ); // パーサーを作ります。 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setValidating( true ); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); // パーシングします。 Document document = documentBuilder.parse( byteArrayInputStream ); System.out.println( "1:パーシング完了。" ); // 1:パーシング完了。 } catch( UnsupportedEncodingException e ) { // StringクラスのgetBytes()メソッドで、存在しない文字コードを // 指定された場合にこの例外が投げられます。 e.printStackTrace(); } catch( ParserConfigurationException e ) { // DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの // 呼び出し中に失敗するとこの例外が投げられます。 e.printStackTrace(); } catch( SAXException e ) { // DocumentBuilderクラスのparse()メソッドの呼び出しで // パーシングに失敗するとこの例外が投げられます。 e.printStackTrace(); } catch( IOException e ) { // DocumentBuilderクラスのparse()メソッドの呼び出しで // パーシングに失敗するとこの例外が投げられます。 e.printStackTrace(); } finally { // 最後にclose()メソッドを呼んで後処理をします。 // また、これは必ず行うため、finally内で行います。 try { if( byteArrayInputStream != null ) { byteArrayInputStream.close(); } } catch( IOException e ) { e.printStackTrace(); } } // 例2:XMLがDTD通りではない場合(DTDをXML内に記述) byteArrayInputStream = null; try { // XMLの文字コードです。 final String XML_TEXT_ENCODE = "UTF-8"; // XMLです。DTD通りのXMLです。 final String XML_TEXT = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<!DOCTYPE test_xml [" + " <!ELEMENT test_xml (test1,test2)>" + " <!ELEMENT test1 (#PCDATA)>" + " <!ELEMENT test2 (test2_child)>" + " <!ELEMENT test2_child (#PCDATA)>" + "]>" + "<test_xml>\n" + " <test>テストです</test>\n" + "</test_xml>\n" ; // この文字列を、UTF-8形式のbyte型配列として取り出します。 byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE ); // そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。 byteArrayInputStream = new ByteArrayInputStream( bytes ); // パーサーを作ります。 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setValidating( true ); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); // パーシングします。 Document document = documentBuilder.parse( byteArrayInputStream ); // Warning: validation was turned on but an org.xml.sax.ErrorHandler was not // set, which is probably not what is desired. Parser will use a default // ErrorHandler to print the first 10 errors. Please call // the 'setErrorHandler' method to fix this. // Error: URI=null Line=3: 要素 "test_xml" ではここに "test" を指定することを許可されません。 // Error: URI=null Line=3: 要素タイプ "test" は宣言されていません。 // Error: URI=null Line=4: 要素 "test_xml" には追加属性が必要です。 // このように、XMLがDTDと一致しないため、エラーとなります。 // ただし、これは「標準エラー出力」に出力されるだけですので、 // 実際にエラー処理をする場合には、org.xml.sax.ErrorHandlerインターフェイスの // 実装クラスを、DocumentBuilderインターフェイスのsetErrorHandler()メソッドに // 渡して、ErrorHandlerインターフェイスの実装クラスでエラー処理をする必要が // あります。 System.out.println( "2:パーシング完了。" ); // 2:パーシング完了。 } catch( UnsupportedEncodingException e ) { // StringクラスのgetBytes()メソッドで、存在しない文字コードを // 指定された場合にこの例外が投げられます。 e.printStackTrace(); } catch( ParserConfigurationException e ) { // DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの // 呼び出し中に失敗するとこの例外が投げられます。 e.printStackTrace(); } catch( SAXException e ) { // DocumentBuilderクラスのparse()メソッドの呼び出しで // パーシングに失敗するとこの例外が投げられます。 e.printStackTrace(); } catch( IOException e ) { // DocumentBuilderクラスのparse()メソッドの呼び出しで // パーシングに失敗するとこの例外が投げられます。 e.printStackTrace(); } finally { // 最後にclose()メソッドを呼んで後処理をします。 // また、これは必ず行うため、finally内で行います。 try { if( byteArrayInputStream != null ) { byteArrayInputStream.close(); } } catch( IOException e ) { e.printStackTrace(); } } // 例3:XMLがDTD通りの場合(DTDローカルファイル) byteArrayInputStream = null; try { // XMLの文字コードです。 final String XML_TEXT_ENCODE = "UTF-8"; // XMLです。DTD通りのXMLです。 final String XML_TEXT = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<!DOCTYPE test_xml SYSTEM \"file:///D:/sample.dtd\">\n" + "<test_xml>\n" + " <test1>テストです</test1>\n" + " <test2>\n" + " <test2_child>テストですって</test2_child>\n" + " </test2>\n" + "</test_xml>\n" ; // この文字列を、UTF-8形式のbyte型配列として取り出します。 byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE ); // そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。 byteArrayInputStream = new ByteArrayInputStream( bytes ); // パーサーを作ります。 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setValidating( true ); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); // パーシングします。 Document document = documentBuilder.parse( byteArrayInputStream ); System.out.println( "3:パーシング完了。" ); // 3:パーシング完了。 } catch( UnsupportedEncodingException e ) { // StringクラスのgetBytes()メソッドで、存在しない文字コードを // 指定された場合にこの例外が投げられます。 e.printStackTrace(); } catch( ParserConfigurationException e ) { // DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの // 呼び出し中に失敗するとこの例外が投げられます。 e.printStackTrace(); } catch( SAXException e ) { // DocumentBuilderクラスのparse()メソッドの呼び出しで // パーシングに失敗するとこの例外が投げられます。 e.printStackTrace(); } catch( IOException e ) { // DocumentBuilderクラスのparse()メソッドの呼び出しで // パーシングに失敗するとこの例外が投げられます。 e.printStackTrace(); } finally { // 最後にclose()メソッドを呼んで後処理をします。 // また、これは必ず行うため、finally内で行います。 try { if( byteArrayInputStream != null ) { byteArrayInputStream.close(); } } catch( IOException e ) { e.printStackTrace(); } } // 例4:XMLがDTD通りではない場合(DTDローカルファイル) byteArrayInputStream = null; try { // XMLの文字コードです。 String XML_TEXT_ENCODE = "UTF-8"; // XMLです。DTD通りではないXMLです。 final String XML_TEXT = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<!DOCTYPE SAMPLE_DTD SYSTEM \"file:///D:/sample.dtd\">\n" + "<test_xml>\n" + " <test>テストです</test>\n" + "</test_xml>\n" ; // この文字列を、UTF-8形式のbyte型配列として取り出します。 byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE ); // そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。 byteArrayInputStream = new ByteArrayInputStream( bytes ); // パーサーを作ります。 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setValidating( true ); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); // パーシングします。 Document document = documentBuilder.parse( byteArrayInputStream ); // Warning: validation was turned on but an org.xml.sax.ErrorHandler was not // set, which is probably not what is desired. Parser will use a default // ErrorHandler to print the first 10 errors. Please call // the 'setErrorHandler' method to fix this. // Error: URI=null Line=3: ルート要素タイプは "test_xml" ですが、"SAMPLE_DTD" と宣言されました。 // Error: URI=null Line=4: 要素 "test_xml" ではここに "test" を指定することを許可されません。 // Error: URI=null Line=4: 要素タイプ "test" は宣言されていません。 // Error: URI=null Line=5: 要素 "test_xml" には追加属性が必要です。 // このように、XMLがDTDと一致しないため、エラーとなります。 // ただし、これは「標準エラー出力」に出力されるだけですので、 // 実際にエラー処理をする場合には、org.xml.sax.ErrorHandlerインターフェイスの // 実装クラスを、DocumentBuilderインターフェイスのsetErrorHandler()メソッドに // 渡して、ErrorHandlerインターフェイスの実装クラスでエラー処理をする必要が // あります。 System.out.println( "4:パーシング完了。" ); // 4:パーシング完了。 } catch( UnsupportedEncodingException e ) { // StringクラスのgetBytes()メソッドで、存在しない文字コードを // 指定された場合にこの例外が投げられます。 e.printStackTrace(); } catch( ParserConfigurationException e ) { // DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの // 呼び出し中に失敗するとこの例外が投げられます。 e.printStackTrace(); } catch( SAXException e ) { // DocumentBuilderクラスのparse()メソッドの呼び出しで // パーシングに失敗するとこの例外が投げられます。 e.printStackTrace(); } catch( IOException e ) { // DocumentBuilderクラスのparse()メソッドの呼び出しで // パーシングに失敗するとこの例外が投げられます。 e.printStackTrace(); } finally { // 最後にclose()メソッドを呼んで後処理をします。 // また、これは必ず行うため、finally内で行います。 try { if( byteArrayInputStream != null ) { byteArrayInputStream.close(); } } catch( IOException e ) { e.printStackTrace(); } } // 例5:XMLがDTD通りの場合(DTDパブリック) byteArrayInputStream = null; try { // XMLの文字コードです。 String XML_TEXT_ENCODE = "UTF-8"; // XMLです。DTD通りではないXMLです。 final String XML_TEXT = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<!DOCTYPE \n" + " web-app PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\"\n" + " \"http://java.sun.com/dtd/web-app_2_3.dtd\">\n" + "<web-app>\n" + " <servlet>\n" + " <servlet-name>サーブレット名</servlet-name>\n" + " <servlet-class>a.class</servlet-class>\n" + " </servlet>\n" + "</web-app>\n" ; // この文字列を、UTF-8形式のbyte型配列として取り出します。 byte[] bytes = XML_TEXT.getBytes( XML_TEXT_ENCODE ); // そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。 byteArrayInputStream = new ByteArrayInputStream( bytes ); // パーサーを作ります。 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setValidating( true ); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); // パーシングします。 Document document = documentBuilder.parse( byteArrayInputStream ); System.out.println( "5:パーシング完了。" ); // 5:パーシング完了。 } catch( UnsupportedEncodingException e ) { // StringクラスのgetBytes()メソッドで、存在しない文字コードを // 指定された場合にこの例外が投げられます。 e.printStackTrace(); } catch( ParserConfigurationException e ) { // DocumentBuilderFactoryクラスのnewDocumentBuilder()メソッドの // 呼び出し中に失敗するとこの例外が投げられます。 e.printStackTrace(); } catch( SAXException e ) { // DocumentBuilderクラスのparse()メソッドの呼び出しで // パーシングに失敗するとこの例外が投げられます。 e.printStackTrace(); } catch( IOException e ) { // DocumentBuilderクラスのparse()メソッドの呼び出しで // パーシングに失敗するとこの例外が投げられます。 e.printStackTrace(); } finally { // 最後にclose()メソッドを呼んで後処理をします。 // また、これは必ず行うため、finally内で行います。 try { if( byteArrayInputStream != null ) { byteArrayInputStream.close(); } } catch( IOException e ) { e.printStackTrace(); } } } }