パッケージ org.opengion.fukurou.xml

# クラス XML2TableParser

java.lang.Object
org.xml.sax.helpers.DefaultHandler
org.opengion.fukurou.xml.XML2TableParser

すべての実装されたインタフェース:
  `ContentHandler`, `DTDHandler`, `EntityResolver`, `ErrorHandler`

public class XML2TableParser extends DefaultHandler
XML2TableParser は、XMLを表形式に変換するためのXMLパーサーです。 XMLのパースには、SAXを採用しています。 このクラスでは、XMLデータを分解し、2次元配列の表データ、及び、指定されたキーに対応する 属性データのマップを生成します。 これらの配列を生成するためには、以下のパラメータを指定する必要があります。 ①2次元配列データ(表データ)の取り出し 行のキー(タグ名)と、項目のキー一覧(タグ名)を指定することで、表データを取り出します。 具体的には、行キーのタグセットを"行"とみなし、その中に含まれる項目キーをその列の"値"と して分解されます。(行キーがN回出現すれば、N行が生成されます。) もし、行キーの外で、項目キーのタグが出現した場合、その項目キーのタグは無視されます。 また、colKeysにPARENT_TAG、PARENT_FULL_TAGを指定することで、rowKeyで指定されたタグの 直近の親タグ、及びフルの親タグ名(親タグの階層を">[タグA]>[タグB]>[タグC]>"で表現)を 取得することができます。 行キー及び項目キーは、`setTableCols(String, String[])`で指定します。 ②属性データのマップの取り出し 属性キー(タグ名)を指定することで、そのタグ名に対応した値をマップとして生成します。 同じタグ名が複数回にわたって出現した場合、値はアペンドされます。 属性キーは、`setReturnCols(String[])`で指定します。 ※それぞれのキー指定は、大文字、小文字を区別した形で指定することができます。 但し、XMLのタグ名とマッチングする際は、大文字、小文字は区別せずにマッチングされます。

変更履歴:
  6.3.9.1 (2015/11/27) 修飾子を、なし → private に変更(フィールド)
導入されたバージョン:
  JDK5.0,

- ## コンストラクタの概要

  コンストラクタ
  コンストラクタ
  説明
  `XML2TableParser(InputStream is)`
  ストリームを指定してパーサーを形成します。
  `XML2TableParser(String st)`
  XMLの文字列を指定してパーサーを形成します。

- ## メソッドの概要

  修飾子とタイプ
  メソッド
  説明
  `void`
  `characters(char[] ch, int offset, int length)`
  テキストデータ読み込み時に行う処理を定義します。
  `void`
  `endDocument()`
  ドキュメント終了時に行う処理を定義します。
  `void`
  `endElement(String uri, String localName, String qName)`
  要素の終了タグ読み込み時に行う処理を定義します。
  `String[]`
  `getCols()`
  表データのヘッダーの項目名を配列で返します。
  `String[][]`
  `getData()`
  表データを2次元配列で返します。
  `ConcurrentMap<String,String>`
  `getRtn()`
  属性データをマップ形式で返します。
  `void`
  `parse()`
  XMLのパースを実行します。
  `void`
  `setReturnCols(String... rKeys)`
  属性データのマップの取り出しを行うための属性キーを指定します。
  `void`
  `setTableCols(String rKey, String... cKeys)`
  2次元配列データ(表データ)の取り出しを行うための行キーと項目キーを指定します。
  `void`
  `startElement(String uri, String localName, String qName, Attributes attributes)`
  要素の開始タグ読み込み時に行う処理を定義します。

  ### クラスから継承されたメソッド org.xml.sax.helpers.DefaultHandler

  `endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, resolveEntity, setDocumentLocator, skippedEntity, startDocument, startPrefixMapping, unparsedEntityDecl, warning`

  ### クラスから継承されたメソッド java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### インタフェースから継承されたメソッド org.xml.sax.ContentHandler

  `declaration`

- ## コンストラクタの詳細

  - ### XML2TableParser

    public XML2TableParser(String st)
    XMLの文字列を指定してパーサーを形成します。
    パラメータ:
      `st` - XMLデータ(文字列)
    変更履歴:
      6.4.1.1 (2016/01/16) PMD refactoring. It is a good practice to call super() in a constructor

  - ### XML2TableParser

    public XML2TableParser(InputStream is)
    ストリームを指定してパーサーを形成します。
    パラメータ:
      `is` - XMLデータ(ストリーム)
    変更履歴:
      6.4.1.1 (2016/01/16) PMD refactoring. It is a good practice to call super() in a constructor

- ## メソッドの詳細

  - ### setTableCols

    public void setTableCols(String rKey, String... cKeys)
    2次元配列データ(表データ)の取り出しを行うための行キーと項目キーを指定します。
    パラメータ:
      `rKey` - 行キー
      `cKeys` - 項目キー配列(可変長引数)
    変更履歴:
      5.1.6.0 (2010/05/01) rowKeyの親タグが取得できるように対応, 5.1.9.0 (2010/08/01) 可変オブジェクトへの参照の直接セットをコピーに変更

  - ### setReturnCols

    public void setReturnCols(String... rKeys)
    属性データのマップの取り出しを行うための属性キーを指定します。
    パラメータ:
      `rKeys` - 属性キー配列(可変長引数)
    変更履歴:
      6.4.3.3 (2016/03/04) 可変長引数でもnullは来る。

  - ### getCols

    public String[] getCols()
    表データのヘッダーの項目名を配列で返します。
    戻り値:
      表データのヘッダーの項目名の配列
    変更履歴:
      5.1.9.0 (2010/08/01) 可変オブジェクトの参照返しをコピー返しに変更

  - ### getData

    public String[][] getData()
    表データを2次元配列で返します。
    戻り値:
      表データの2次元配列
    このﾒｿｯﾄﾞは、nullを返しません

  - ### getRtn

    public ConcurrentMap<String,String> getRtn()
    属性データをマップ形式で返します。 ※ 6.4.3.1 (2016/02/12) で、セットするMapを、ConcurrentHashMap に置き換えているため、 key,value ともに、not null制限が入っています。
    戻り値:
      属性データのマップ(not null制限)
    変更履歴:
      6.4.3.3 (2016/03/04) 戻すMapが、not null制限つきであることを示すため、ConcurrentMap に置き換えます。

  - ### parse

    public void parse()
    XMLのパースを実行します。

  - ### startElement

    public void startElement(String uri, String localName, String qName, Attributes attributes)
    要素の開始タグ読み込み時に行う処理を定義します。
    定義:
      `startElement` インタフェース内 `ContentHandler`
    オーバーライド:
      `startElement` クラス内 `DefaultHandler`
    パラメータ:
      `uri` - 名前空間ＵＲＩ。要素が名前空間 ＵＲＩを持たない場合、または名前空間処理が行われない場合は空文字列
      `localName` - 接頭辞を含まないローカル名。名前空間処理が行われない場合は空文字列
      `qName` - 接頭辞を持つ修飾名。修飾名を使用できない場合は空文字列
      `attributes` - 要素に付加された属性。属性が存在しない場合、空の Attributesオブジェクト
    変更履歴:
      5.1.6.0 (2010/05/01) rowKeyの親タグが取得できるように対応, 6.3.9.0 (2015/11/06) コンストラクタで初期化されていないフィールドを null チェックなしで利用している(findbugs)

  - ### characters

    public void characters(char[] ch, int offset, int length)
    テキストデータ読み込み時に行う処理を定義します。
    定義:
      `characters` インタフェース内 `ContentHandler`
    オーバーライド:
      `characters` クラス内 `DefaultHandler`
    パラメータ:
      `ch` - 文字データ配列
      `offset` - 文字配列内の開始位置
      `length` - 文字配列から使用される文字数
    変更履歴:
      6.3.9.0 (2015/11/06) コンストラクタで初期化されていないフィールドを null チェックなしで利用している(findbugs), 6.4.3.3 (2016/03/04) ConcurrentHashMap の not null制限のチェック追加

  - ### endElement

    public void endElement(String uri, String localName, String qName)
    要素の終了タグ読み込み時に行う処理を定義します。
    定義:
      `endElement` インタフェース内 `ContentHandler`
    オーバーライド:
      `endElement` クラス内 `DefaultHandler`
    パラメータ:
      `uri` - 名前空間 URI。要素が名前空間 URI を持たない場合、または名前空間処理が行われない場合は空文字列
      `localName` - 接頭辞を含まないローカル名。名前空間処理が行われない場合は空文字列
      `qName` - 接頭辞を持つ修飾名。修飾名を使用できない場合は空文字列

  - ### endDocument

    public void endDocument()
    ドキュメント終了時に行う処理を定義します。
    定義:
      `endDocument` インタフェース内 `ContentHandler`
    オーバーライド:
      `endDocument` クラス内 `DefaultHandler`