倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

javax.xml

XMLStreamReader をもう少し詳しく (6): require() メソッド

今回は XMLStreamReader#require() メソッド。 このメソッドは、現在の XML イベントが要求したものと一致するかどうかをチェックし、一致すればそのまま、一致しなければ XMLStreamException を投げます。引数 require() メソッドの定義は以下のようになっ…

XMLStreamReader をもう少し詳しく (5):要素の名前に関するメソッド

今回は要素の名前に関連するメソッドを見ていきます。 具体的には以下の4つのメソッドです: getName() getPrefix() getLocalName() getNamespaceURI() これらは「要素の名前」に関連するメソッドのため、現在の XML イベントが属性 (Attribute) のときに呼…

XMLStreamReader をもう少し詳しく (4): getElementText() メソッド

今回は XMLStreamReader#getElementText() メソッドを見ていきます。getElementText() メソッドは、要素の開始と要素の終了で挟まれたテキストを返します。 これは XML で書かれたプロパティファイルを処理する際に便利です。例えば <book> <title>なぜ宇宙人は地球に来な</title></book>…

XMLStreamReader をもう少し詳しく (3): nextTag() メソッド

今回は XMLStreamReader#nextTag() メソッドの処理を見ていきます。nextTag() メソッドは、次の要素の開始 (START_ELEMENT) または要素の終了 (END_ELEMENT) まで XML 文書の解析を進めます。 解析の際の処理は、現れた XML イベントの種類によって次の4種類…

XMLStreamReader をもう少し詳しく (2): hasXxxx() メソッド

今回は hasXxxx() メソッド。hasXxxx() メソッドもオブジェクトの状態を取得するメソッドです。 こちらも boolean 値を返します。 ここで見るメソッドは hasName() hasText() です。 hasNext() メソッドは列挙のためのメソッド(Iterator インターフェースの…

XMLStreamReader をもう少し詳しく (1): getEventType(), isXxxx() メソッド

今回から何回かにわたって、javax.xml.stream.XMLStreamReader の挙動を見ていきます(一覧)。予定としては getEventType(), isXxxx() メソッド hasXxxx() メソッド nextTag() メソッド getElementText() メソッド 要素の名前に関するメソッド(getName(), …

XSLT スタイルシートのソースとしての org.w3c.dom.Document オブジェクト

「JavaでXSLT変換処理。DOMSourceだと何故かダメ。」という記事で XSLT スタイルシートの Source として DOMSource が使えないというのが載ってました。 jre 1.5 での話とのことなので、1.6 になったら修正されているかと思って試してみましたが、直ってませ…

org.w3c.dom.Document を java.io.Reader に変換する

以前の記事で org.w3c.dom.Document オブジェクトを java.io.Writer へ書き出す処理を見ました。今回はそれを踏まえて、「org.w3c.dom.Document オブジェクトを java.io.Reader オブジェクトとして扱う」方法を考えます。 この目的のために java.io.Reader …

FEATURE フィールド

標準 API に定義されている Source, Result インターフェースの実装には、public static final な String フィールド「FEATURE」が定義されています。 これは TransformerFactory#getFeature() メソッドによって、各タイプの Source, Result をサポートして…

システムリソースからスタイルシートを読み込む (3) : SystemStylesheetLoader

前回のサンプルコードでは、スタイルシートを読み込む手順 (Main クラスの main() メソッド)において、システムリソースの読み込みの基点となる「BASEDIR」変数が2箇所(ステップ2とステップ3)で参照されています。 この整合性は保守をする人にとって無駄…

システムリソースからスタイルシートを読み込む (2)

今回はシステムリソース内のスタイルシートが他のスタイルシートを読み込む(<import>, <include> 要素を持つ)場合を考えます。何の設定もせずに前回と同じ方法をとると、「(読み込まれる方の)スタイルシートが見つからない」旨の例外が投げられます。 これは、読み込み先</include></import>…

システムリソースからスタイルシートを読み込む (1)

Java プログラム内から XSL 変換を実行するには、スタイルシートを読み込む必要があります。 ユーザーが提供するスタイルシートを読み込む場合は通常のファイルを読み込む方法で問題ありませんが、スタイルシート自体を開発者が提供する場合(スタイルシート…

org.w3c.dom.Document を出力する

org.w3c.dom.Document オブジェクトを標準出力やファイルに出力するのに困ったことはありませんか? javax.xml.transform パッケージ内のクラスを使うと、ある程度簡単に Document オブジェクトを外部へ書き出すことが出来ます。java.io.Writer へ書き出す p…

Source, Result と close() 処理

Source, Result インターフェースには、リソースを扱うクラスやインターフェースに通常定義されている「リソース解放」メソッド close()*1 が定義されていないため、これらの処理が自動的に行われていると勝手に思い込んでいましたが、どうもそうではないよ…

Source

今回は javax.xml.transform.Source インターフェースとその実装クラスを見ていきます。Source インターフェース自体にはあまりメソッドは定義されていません。 これは入力となる XML 文書をオブジェクト化して Transformer オブジェクトに渡すためのインタ…

Result

今回は javax.xml.transform.Result インターフェースとその実装クラスを見ていきます。Result インターフェースを実装したクラスには、以下のようなものがあります*1: javax.xml.transform.stream.StreamResult javax.xml.transform.sax.SAXResult javax.x…

TransformerFactory, Transformer

今回から何回かにわたって「javax.xml.transform パッケージ」内のクラスを見ていきます(一覧)。javax.xml.transform パッケージ内には、XSL 変換 (XSLT : XML Stylesheet Language Transformation) を行うための API が定義されています*1。ただしパッケ…

改・NamespaceContext の実装を考える (6) : Dom4jNamespaceContext

以前に org.dom4j.Element クラス用に NamespaceContext のサブクラスを定義して、AspectJ を用いてその取得用のメソッドを織り込むということをやりました(一覧)。 新に作成した AbstractCompositeNamespaceContext クラスを用いて、同様のことをやってお…

改・NamespaceContext の実装を考える (5) : MapNamespaceContext

前回作成した AbstractCompositeNamespaceContext クラスを用いて、ベースとなる NamespaceContext を持ち、Map のように新に名前空間宣言を登録することも出来る MapNamespaceContext クラスを作成しましょう(一覧)。基本方針は、以前の記事で作成した Ma…

改・NamespaceContext の実装を考える (4) : AbstractCompositeNamespaceContext

AbstractCompositeNamespaceContext は、親となる NamespaceContext(例えば親ノードの NamespaceContext)を持ち、それに加えて追加の名前空間宣言があるような場合に使用する NamespaceContext です。 これは以前の記事での AbstractNamespaceContext に対…

改・NamespaceContext の実装を考える (3) : EmptyNamespaceContext

前回作成した AbstractNamespaceContext を用いて、名前空間宣言が全くされていない NamespaceContext を作成しましょう(一覧)。 注意点は、getNamespaceURI(String) メソッドの返り値が常に空文字列 (XMLConstants.NULL_NS_URI) だってことでしょうか? …

改・NamespaceContext の実装を考える (2) : AbstractNamespaceContext

今回は AbstractNamespaceContext の実装を考えます(一覧)。AbstractNamespace は NamespaceContext の JavaDoc で規定された、「特別な引数」に対して「特別な返り値」を返す、という処理を行わせます。getNamespaceURI(String) メソッドの実装 まず、Abs…

改・NamespaceContext の実装を考える (1) : クラス階層

以前 javax.xml.namsepece.NamespaceContext インターフェースの実装クラスを考えてましたが(一覧)、不具合の修正とリファクタリングのため、もう一度 NamespaceContext の実装を考えていきます。 クラス名やメソッド名が少々変わってますが、基本的なアプ…

XMLEventFactory (7) : その他 (2) DTD, EntityReference

今回は DTD と実体参照。 DTD EntityReference 正直あまり使わないので、サラッと流します(というか、サンプルは示しません)。DTD DTD イベントを生成するメソッドは XMLEventFactory#createDTD() です。 createDTD(String dtd) 引数は DTD を表す文字列。…

XMLEventFactory (6) : その他 (1) Comment, ProcessingInstruction

今回はコメントと処理命令に関する XML イベント。 Comment ProcessingInstruction Comment Comment イベントは XMLEventFactory#createComment() メソッドによって生成します。 createComment() メソッドは次の1つのみが定義されています。 createComment(S…

XMLEventFactory (5) : 文字データ Characters, Space, CData, IgnorableSpace

今回は文字データに関する XML イベント。 Characters StartDocument Characters イベントを生成するメソッドは次の4つが定義されています: createCharacters(String data) createSpace(String data) createCData(String data) createIgnorableSpace(String…

XMLEventFactory (4) : 要素 StartElement, EndElement

今回は要素に関する XML イベント。 StartElement EndElement StartElement StartElement イベントは XMLEventFactory#createStartElement() メソッドによって生成します。 createStartElement() メソッドは次の4つが定義されています。 createStartElement(…

XMLEventFactory (3) : 属性・名前空間宣言 Attribute, Namespace

今回は属性と名前空間宣言に関する XML イベント。 Attribute Namespace Attribute Attribute イベントは XMLEventFactory#createAttribute() メソッドによって生成します。 createStartAttribute() メソッドは次の3つが定義されています。 createAttribute(…

XMLEventFactory (2) : 文書 StartDocument, EndDocument

今回は文書に関する XML イベント。 StartDocument EndDocument StartDocument StartDocument イベントは XMLEventFactory#createStartDocument() メソッドによって生成します。 createStartDocument() メソッドは次の4つが定義されています。 createStartDo…

XMLEventFactory (1) : 導入

javax.xml.stream.XMLEventFactory は StAX で使用する XML イベント (javax.xml.stream.events.XMLEvent オブジェクト) を生成するクラスです。 今回から何度かにわたって、このクラスの使用方法を見ていきます。 あまり使うことはないかも知れませんが。XM…