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