JavaA2Z

KAB-studio > プログラミング > JavaA2Z > Xercesとは

Xerces

日本語 拡張可能印言語解析青蝶
英語 xerces
ふりがな ざーしず
フリガナ ザーシズ

解説

XMLパースライブラリのひとつ。
XMLパーサー
XMLパース(解析)をい、構造を組み替え、さらに文字列化やファイルストリームへの出力をうことができる。
 
実際には、XercesはDOMやSAXの「実装クラス」を提供する。
DOMやSAXをプログラムで使用する際にはインターフェイスを通して使用するが、その際に「実際に処理をする実装クラス」をXercesは提供する。
Xerces専用のクラスXMLSerializerクラス等、一部の補助用クラスのみとなっている。
 
Apache Software Foundationプロジェクトのひとつ。そのため「Apache Xerces」と呼ぶこともある。
Xercesは様々なプログラミング言語用のものが作られており、その中から特にJava用のものを指す場合には「Xerces-J」と言う。
 
この単語は発音が非常に難しい。
一応「ザーシズ」という発音が比較的よく使われているが、公式のものはなく、カタカナ読みしづらいため注意が必要。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.io.StringWriter;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;

public class Sample
{
    public static void main( String[] args )
    {
/*
1.
Xercesを使用する場合、まず以下のWebサイト

http://xml.apache.org/xerces-j/

から任意のファイル(たとえばXerces-J-bin.2.7.1.zip)を
ダウンロードしてください。


2.
以下のファイルをクラスパスに加えてください。

xercesImpl.jar
xml-apis.jar

*/

        ByteArrayInputStream byteArrayInputStream = null;
        StringWriter stringWriter = null;
        try
        {
            /** XMLの文字コードです。 */
            String XML_TEXT_ENCODE = "UTF-8";
            /** XMLの基本部分です。 */
            String XML_TEXT_HEADER = "<?xml version='1.0' encoding='UTF-8'?>\n<test_xml>\n</test_xml>\n";
            // これは、以下のようになっています。
/*
<?xml version='1.0' encoding='UTF-8'?>
<test_xml>
</test_xml>
*/
            // この文字列を、UTF-8形式のbyte型配列として取り出します。
            byte[] bytes = XML_TEXT_HEADER.getBytes( XML_TEXT_ENCODE );
            // そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
            byteArrayInputStream = new ByteArrayInputStream( bytes );

            // パーサーを作ります。
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
            System.out.println( documentBuilder );
            // org.apache.xerces.jaxp.DocumentBuilderImpl@1126b07
            // このように、Xercesがパーサーとして使用されています。
            
            // パーシングします。
            Document document = documentBuilder.parse( byteArrayInputStream );

            // ルートエレメント、つまり<test_xml>タグを指すエレメントを取得します。
            Element rootElement = document.getDocumentElement();

            // エレメントを新規作成してルートエレメントに追加します。
            Element newElement = document.createElement( "test1" );
            Text newText = document.createTextNode( "テストです" );
            newElement.appendChild( newText );
            rootElement.appendChild( newElement );

            // もうひとつ追加します。
            newElement = document.createElement( "test2" );
            newText = document.createTextNode( "テストですって" );
            newElement.appendChild( newText );
            rootElement.appendChild( newElement );

            // Xercesのクラスを使用して、StringWriterクラスを通して文字列に出力します。
            stringWriter = new StringWriter();
            OutputFormat outputFormat = new OutputFormat( document, XML_TEXT_ENCODE, true );
            outputFormat.setLineWidth( 0 );
            XMLSerializer xmlSerializer = new XMLSerializer( stringWriter, outputFormat );
            xmlSerializer.serialize( document );

            // とりあえず出力。
            System.out.println( stringWriter.toString() );
            // <?xml version="1.0" encoding="UTF-8"?>
            // <test_xml>
            //     <test1>テストです</test1>
            //     <test2>テストですって</test2>
            // </test_xml>

            // このようにXMLを作成することができます。
            // 実際にはこのあとファイルに出力したりサーブレットから
            // 返したりします。
        }
        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( stringWriter != null )
                {
                    stringWriter.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            try
            {
                if( byteArrayInputStream != null )
                {
                    byteArrayInputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}
// Sample.java
import java.io.StringWriter;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;

public class Sample
{
    public static void main( String[] args )
    {
/*
1.
Xercesを使用する場合、まず以下のWebサイト

http://xml.apache.org/xerces-j/

から任意のファイル(たとえばXerces-J-bin.2.7.1.zip)を
ダウンロードしてください。


2.
以下のファイルをクラスパスに加えてください。

xercesImpl.jar
xml-apis.jar

*/

        ByteArrayInputStream byteArrayInputStream = null;
        StringWriter stringWriter = null;
        try
        {
            /** XMLの文字コードです。 */
            String XML_TEXT_ENCODE = "UTF-8";
            /** XMLの基本部分です。 */
            String XML_TEXT_HEADER = "<?xml version='1.0' encoding='UTF-8'?>\n<test_xml>\n</test_xml>\n";
            // これは、以下のようになっています。
/*
<?xml version='1.0' encoding='UTF-8'?>
<test_xml>
</test_xml>
*/
            // この文字列を、UTF-8形式のbyte型配列として取り出します。
            byte[] bytes = XML_TEXT_HEADER.getBytes( XML_TEXT_ENCODE );
            // そのbyte型配列を対象とする、ByteArrayInputStreamクラスを用意します。
            byteArrayInputStream = new ByteArrayInputStream( bytes );

            // パーサーを作ります。
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
            System.out.println( documentBuilder );
            // org.apache.xerces.jaxp.DocumentBuilderImpl@1126b07
            // このように、Xercesがパーサーとして使用されています。
            
            // パーシングします。
            Document document = documentBuilder.parse( byteArrayInputStream );

            // ルートエレメント、つまり<test_xml>タグを指すエレメントを取得します。
            Element rootElement = document.getDocumentElement();

            // エレメントを新規作成してルートエレメントに追加します。
            Element newElement = document.createElement( "test1" );
            Text newText = document.createTextNode( "テストです" );
            newElement.appendChild( newText );
            rootElement.appendChild( newElement );

            // もうひとつ追加します。
            newElement = document.createElement( "test2" );
            newText = document.createTextNode( "テストですって" );
            newElement.appendChild( newText );
            rootElement.appendChild( newElement );

            // Xercesのクラスを使用して、StringWriterクラスを通して文字列に出力します。
            stringWriter = new StringWriter();
            OutputFormat outputFormat = new OutputFormat( document, XML_TEXT_ENCODE, true );
            outputFormat.setLineWidth( 0 );
            XMLSerializer xmlSerializer = new XMLSerializer( stringWriter, outputFormat );
            xmlSerializer.serialize( document );

            // とりあえず出力。
            System.out.println( stringWriter.toString() );
            // <?xml version="1.0" encoding="UTF-8"?>
            // <test_xml>
            //     <test1>テストです</test1>
            //     <test2>テストですって</test2>
            // </test_xml>

            // このようにXMLを作成することができます。
            // 実際にはこのあとファイルに出力したりサーブレットから
            // 返したりします。
        }
        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( stringWriter != null )
                {
                    stringWriter.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }

            try
            {
                if( byteArrayInputStream != null )
                {
                    byteArrayInputStream.close();
                }
            }
            catch( IOException e )
            {
                e.printStackTrace();
            }
        }
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/12/01
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。