ESDOM (似非DOM) version 1.1 for C++


XMLを扱うのに最低限必要だと思われる機能しか実装していません。 スキーマの解釈等は一切行いません。 (スキーマ指定部分を無視するわけではありません。単なる文字列として格納します) そのためエンティティを定義していても一切無視してしまいます。 これによる文章の破壊を防ぐために、HTML で使われるエンティティは定義していようがしていまいが文字列に変換します。 変換されるエンティティについては、このドキュメントの最後にあるエンティティリストを参照してください。

対応するエンコーディングは UTF-8、UTF-16 (bigEndian, littleEndian両対応)のみです。 ただし対応している文字セットは UCS-2 なので、 0xffff以上の文字を含むファイルは parse に失敗します(4オクテット以上で1文字を表すことがある UTF-8 や、 サロゲートペアを使用した UTF-16 がこれに該当します)

想定している環境は以下の通りです。

Platform Compiler
32bitWindows VC++5.0以降
64bitWindows
linux gcc

実際に動作確認が出来ているのは以下の環境です。

Platform Compiler
Windows2000 (intel) VC++6.0 SP5
RedHat Linux 7.2 (intel) (kernel2.4.18にアップグレード) gcc 2.96-98

Index

types

ESDOM::ESDOM_CHAR ESDOM::ESDOM_FILE

macros

ESDOM_TEXT

functions

ESDOM
initialize createDocument parse serialize
fopen fclose getLastError clearLastError

objects

ESDOMException ESDOMString Node NodeList
NamedNodeMap Element Attr Text
CDATASection ProcessingInstruction Comment Document
DocumentType

types

ESDOM::ESDOM_CHAR
ESDOM 内で使用されている文字の型。符号無し16bits整数であり、エンコーディングは UCS2。
ESDOM::ESDOM_FILE
ESDOM 内で使用されるファイルハンドルの型。処理系によって実体は異なります。

macros

ESDOM_TEXT

ESDOM_CHAR のリテラル文字列を作るときに ESDOM_TEXT("ABC") というように使います。 コンパイラによっては使用できません。使用できないコンパイラは以下の通りです。

使用できないコンパイラのために CESDOM_TEXT というクラスを用意しています。 これは CESDOM_TEXT("ABC") というようにすると Unicodeでも文字コードが変わらない文字で構成された文字列に限り const ESDOM_CHAR* と同じように使えます。 ですがリテラルではないのですぐに消滅します。 また、生成にオーバーヘッドがあるので、ループ内で使ったりする場合は グローバルで宣言した物を使うなり、static 宣言を使うなりしてください。

正しい使い方:
void test_func(){
    foo(CESDOM_TEXT("abc"));
}

void test_func2(){
    static CESDOM_TEXT abc("abc");//static 宣言するとオーバーヘッドが初期化時だけで済みます
    foo(abc);
}

間違った使い方
void test_func3(){
    const ESDOM_CHAR *ptr = CESDOM_TEXT("abc")
    foo(ptr);//この時点で既に消滅しているのでエラーになります
}

functions

namespace ESDOM
関数
initialize (bool)

ESDOM で使用する各種定数の値を指定します。

ESDOM では、使用用途に応じてメモリの使用を最適化できるようにしています。 そのためメモリに関する定数を ESDOM の関数やオブジェクトを使う前 (プログラムの開始時が望ましい) に、 一度だけ必ず呼び出す必要があります。 従って、本来なら ESDOM のオブジェクトはグローバル変数として使えないことになりますが (initialize関数を呼ぶ前に作られるため)、 それじゃ使い物にならないので小細工してグローバル変数として使えるようにしています。 が、そうやって無理をしてるのでグローバル変数として使う場合は初期値を設定することが出来ません。 initialize関数を呼んでから代入してください。

パラメータ
小規模なXMLを想定しているので初期値は小さめです。
NodeListPageSize(unsigned long)
NodeList で Node 何個ごとにメモリを再割り当てするか。初期値は16です。
NamedNodeMapHashTableSize(unsigned long)
NamedNodeMap でのハッシュテーブルのテーブルサイズ。素数であった方が効率がいい場合が多いです。初期値は31です。
ESDOMStringPageSize(unsigned long)
ESDOMString で 何文字ごとにメモリを再割り当てするか。初期値は32です。
戻り値
初期化に成功すれば true が、失敗すれば false が返ります。
例外
この関数は例外を発生しません。
createDocument (Document)

新しいESDOMツリーを構築します。

パラメータ
version(const ESDOM_CHAR *)
xmlドキュメントのxmlバージョンを示す文字列。 デフォルトは“1.0”。
rootTagName(const ESDOM_CHAR *)
ルートエレメントのタグ名。
doctype(const ESDOM_CHAR *)
ドキュメントタイプを示す文字列。 (Document::docutype参照) 必要がなければ空文字列でも良い。
戻り値
成功すれば Document オブジェクトが、エラーが発生すればnullが返ります。
例外
ESDOMException
INVALID_CHARACTER_ERR
rootTagName が不正なタグ名であった場合に発生。
parse (Document)

与えられたファイルハンドルから、ESDOMツリーを構築します。 ESDOM::openFile で開いたものである必要があります。

パラメータ
FileHandle(ESDOM_FILE)
xmlドキュメントのファイルハンドル。stdinも指定できますが、それ以外のストリームは受け付けません。
戻り値
成功すれば Document オブジェクトが、エラーが発生すればnullが返ります。
例外
この関数は例外を発生しません。
serialize (bool)

ESDOMツリーからxmlドキュメントを作成して、指定されたファイルに書き込みます。 ここで指定するファイルは ESDOM::openFile 関数で取得した物を 指定してください。

パラメータ
document(Document)
出力する Document オブジェクト
encoding(unsigned short)
出力時のエンコーディング。
UTF_8
UTF-8
UTF_16BE
UTF-16ビッグエンディアン (BOM有り)
UTF_16LE
UTF-16リトルエンディアン (BOM有り)
UTF_16BE_NONBOM
UTF-16ビッグエンディアン (BOM無し)
UTF_16LE_NONBOM
UTF-16リトルエンディアン (BOM無し)
FileHandle(ESDOM_FILE)
xmlドキュメントのファイルハンドル。stdout、stderrも指定できますが、それ以外のストリームは受け付けません。
戻り値
成功した場合は true 、そうでなければ false が返ります。
例外
この関数は例外を発生しません。
openFile (ESDOM_FILE)

指定したファイルを開きます。 parseserialize では これで取得したファイルハンドルを使用してください。

パラメータ
filename(const char * / const ESDOM_CHAR *)
開くファイル名。
mode(int)
ファイルのオープンモード。 下記の開き方とアクセスモードの論理和で指定してください。
開き方 (この内一つだけ指定してください)
FILE_CREATE_NEW
新しくファイルを作って開きます。既にファイルが存在すれば失敗します。
FILE_CREATE_ALWAYS
新しくファイルを作って開きます。既にファイルが存在すれば上書きします。
FILE_OPEN_EXISTING
既存のファイルを開きます。ファイルが存在しなければ失敗します。
FILE_OPEN_EXISTING
既存のファイルを開きます。ファイルが存在しなければ失敗します。
アクセスモード (必要なだけ組み合わせてください)
FILE_READ
このファイルに読みとりを許可します。
FILE_WRITE
このファイルに書き込みを許可します。
戻り値
ESDOM_FILE が返ります。
例外
この関数は例外を発生しません。
closeFile (bool)

指定したファイルを閉じます。 ESDOM::openFile で開いたファイルはこれで閉じてください。

パラメータ
FileHandle(ESDOM_FILE)
閉じるファイルハンドル。
戻り値
正常に終了すると true を返します。エラーが発生すると false を返します。
例外
この関数は例外を発生しません。
lockFile (bool)

指定したファイルをロックします。

パラメータ
FileHandle(ESDOM_FILE)
ロックするファイルハンドル。
FileHandle(ESDOM_FILE)
ロック方法。 FILE_LOCK_NB を指定しなかった場合は、余所からのロックが解放されるまで待ちます。
Windows 95, 98, 98SE, Meでは共有ロックが出来ないので、 FILE_LOCK_SH を指定しても排他ロックをします
FILE_LOCK_EX
排他ロックします。FILE_LOCK_NB と同時に指定できます。
FILE_LOCK_SH
共有ロックします。FILE_LOCK_NB と同時に指定できます。
FILE_LOCK_NB
既に他からロックされているなど、ロックが出来ない場合にもすぐに制御を返します。
FILE_LOCK_UN
ロックを解除します。
戻り値
正常に終了すると true を返します。エラーが発生すると false を返します。
例外
この関数は例外を発生しません。
getLastError (ESDOMString)

最後に発生したエラーの詳細を取得します。 (version 1.1では parse 時のエラーメッセージしか取得できません)

パラメータ
この関数はパラメータをとりません。
戻り値
エラーの内容を示す ESDOMString が返ります。
例外
この関数は例外を発生しません。
clearLastError (void)

エラーの詳細をクリアします。

パラメータ
この関数はパラメータをとりません。
戻り値
この関数は戻り値を返しません。
例外
この関数は例外を発生しません。

objects

ESDOM::ESDOMException

ESDOM 内で例外が発生した場合に投入されるオブジェクト。 要因については下記の通り。

定数 説明
INDEX_SIZE_ERR 1 添え字やサイズが負であったり、最大値以上である場合に発生
HIERARCHY_REQUEST_ERR 3 ある Node が、その Node が属せないところに挿入されようとした場合に発生
INVALID_CHARACTER_ERR 5 名前などで、不当な文字(列)が指定された場合に発生
NO_DATA_ALLOWED_ERR 6 データを持つことが出来ない Node にデータを持たせようとした場合に発生
NO_MODIFICATION_ALLOWED_ERR 7 読みとり専用オブジェクトを書き換えようとした場合に発生
NOT_FOUND_ERR 8 参照しようとした Node が見つからなかった場合に発生
INUSE_ATTRIBUTE_ERR 10 既に他の Node で使われている Attr を追加しようとした場合に発生
UNINITIALIZED 100 ESDOM::initialize 関数が呼ばれていません
OUT_OF_MEMORY 101 メモリの割り当てに失敗したときに発生します
NULL_OBJECT 102 オブジェクトの中身が空なのにメソッドを呼び出した場合に発生します
BAD_CAST 103 不正なキャストが行われた場合に発生します
METHOD_IS_NOT_MEMBER 104 存在しないメソッドを呼び出した場合に発生します
中身が Text である Node に対し Element が持つメソッドを呼んだ場合など
属性値
code (unsigned short)

どんな要因で発生したかを示すコード。詳細は上記の通り。

ESDOM::ESDOMString

ESDOM_CHAR 文字列を簡単に扱うためのオブジェクト。std::string みたいなもの。 += や + で文字列を結合できます。 参照:『ESDOMString の宣言

引数の型が const ESDOM_CHAR* となっているところすべてに指定できます。

メソッド
getLength (unsigned long)

文字数を返します。

パラメータ
このメソッドはパラメータをとりません。
戻り値
文字数が返ります。
例外
このメソッドは例外を発生しません。
Dec_to_Int (int)

文字列が10進数値であればその値を返します。

パラメータ
このメソッドはパラメータをとりません。
戻り値
文字列が示す値が返ります。
例外
このメソッドは例外を発生しません。
Dec_to_UInt (unsigned)

文字列が10進数値であればその値を返します。

パラメータ
このメソッドはパラメータをとりません。
戻り値
文字列が示す値が返ります。
例外
このメソッドは例外を発生しません。
Hex_to_UInt (unsigned)

文字列が16進数値であればその値を返します。

パラメータ
このメソッドはパラメータをとりません。
戻り値
文字列が示す値が返ります。
例外
このメソッドは例外を発生しません。
index (unsigned long)

部分文字列を検索します。

パラメータ
substring(const ESDOMString / const ESDOM_CHAR *)
検索する部分文字列
戻り値
見つかった場合は先頭のインデックスが返ります。見つからなければ-1(32bit環境なら0xffffffff)が返ります。
例外
このメソッドは例外を発生しません。
substr (ESDOMString)

部分文字列を取り出します。

パラメータ
index(unsigned long)
取り出す最初の文字のインデックス。
length(unsigned long)
取り出す文字列の長さ。元の文字列の後ろにはみ出す場合は切りつめられます。
戻り値
ESDOMString が返ります。
例外
このメソッドは例外を発生しません。
ESDOM::Node

ノードタイプの値はDOM Level1と同じです。 DOM同様、継承元というだけで表に出てこないオブジェクトです。

ノードタイプによる各属性値の内容の違いは以下の通りです。

定数 nodeName nodeValue attributes childNodes
ELEMENT_NODE 1 タグ名 - 属性を保持する NamedNodeMap 子を保持する NodeList
ATTRIBUTE_NODE 2 属性名 属性値 - -
TEXT_NODE 3 #text テキストの内容 - -
CDATA_SECTION_NODE 4 #cdata-section CDATAセクションの内容 - -
PROCESSING_INSTRUCTION_NODE 7 ターゲット ターゲットを除いた内容全部 - -
COMMENT_NODE 8 #comment コメントの内容 - -
DOCUMENT_NODE 9 #document - - ProcessingInstructionCommentDocumentType、及びルートエレメントを保持する NodeList
DOCUMENT_TYPE_NODE 10 ドキュメントタイプ名(Document::doctype参照) - - -
属性値
nodeName (ESDOMString) readonly

このノードの名前。タイプに依存するので上記の表を参照のこと。

  • 取得:getNodeName(void)
nodeValue (ESDOMString)

このノードの値。タイプに依存するので上記の表を参照のこと。

  • 取得:getNodeValue(void)
  • 設定:setNodeValue(const ESDOM_CHAR *)
nodeType (unsigned short) readonly

このノードのタイプを示す整数。上記の表を参照。

  • 取得:getNodeType(void)
parentNode (Node) readonly

このノードの親ノード。

  • 取得:getParentNode(void)
childNodes (NodeList) readonly

エレメントノードであれば、このノードのすべての子を含んだ NodeList。 それ以外はnull。

  • 取得:getChildNodes(void)
firstChild (Node) readonly

このノードの最初の子。 子ノードが無ければ null。

  • 取得:getFirstChild(void)
lastChild (Node) readonly

このノードの最後の子。 子ノードが無ければ null。

  • 取得:getLastChild(void)
previousSibling (Node) readonly

このノードの直前にある兄弟ノード。 該当するノードが無ければ null。

  • 取得:getPreviousSibling(void)
nextSibling (Node) readonly

このノードの直後にある兄弟ノード。 該当するノードが無ければ null。

  • 取得:getNextSibling(void)
attributes (NamedNodeMap) readonly

エレメントノードであれば、このノードの属性ノードを含んだ NamedNodeMap。 それ以外はnull。

  • 取得:getAttributes(void)
メソッド
insertBefore (Node)

子ノードリスト内の、 refChild の前に newChild を挿入します。 refChild が null である場合は、newChild を子ノードのリストの最後に追加します。

パラメータ
newChild(Node)
挿入するノード。
refChild(Node)
このノードの前に挿入されます。
戻り値
挿入されたノードが返ります。
例外
ESDOMException
HIERARCHY_REQUEST_ERR
このノードが newChild の型の子ノードを持てない場合や、 newChild がこのノードの祖先であれば発生します。
NO_MODIFICATION_ALLOWED_ERR
このノードが読みとり専用であれば発生します。
NOT_FOUND_ERR
refChild がこのノードの子でない場合に発生します。
replaceChild (Node)

子ノードリストの中の oldChild を newChild で置き換えます。 newChild が既にESDOMツリーの中にある場合には、ツリーから外された後に置き換えられます。

パラメータ
newChild(Node)
置き換える新しいノード。
oldChild(Node)
置き換えられる古いノード。
戻り値
置き換えられたノードが返ります。
例外
ESDOMException
HIERARCHY_REQUEST_ERR
このノードが newChild の型の子ノードを持てない場合や、 newChild がこのノードの祖先であれば発生します。
NO_MODIFICATION_ALLOWED_ERR
このノードが読みとり専用であれば発生します。
NOT_FOUND_ERR
oldChild がこのノードの子でない場合に発生します。
removeChild (Node)

子ノードを子のリストから取り除きます。

パラメータ
oldChild(Node)
取り除く子ノード。
戻り値
取り除かれたノードが返ります。
例外
ESDOMException
NO_MODIFICATION_ALLOWED_ERR
このノードが読みとり専用であれば発生します。
NOT_FOUND_ERR
oldChild がこのノードの子でない場合に発生します。
appendChild (Node)

ノード newChild をこのノードの子のリストの末尾に追加します。 newChild が既にESDOMツリーの中にある場合には、ツリーから外された後に追加されます。

パラメータ
newChild(Node)
追加するノード。
戻り値
追加されたノードが返ります。
例外
ESDOMException
HIERARCHY_REQUEST_ERR
このノードが newChild の型の子ノードを持てない場合や、 newChild がこのノードの祖先であれば発生します。
NO_MODIFICATION_ALLOWED_ERR
このノードが読みとり専用であれば発生します。
hasChildNodes (bool)

ノードが子を持っているか否かを確認します。

パラメータ
このメソッドはパラメータをとりません。
戻り値
ノードが子を持っている場合には true、子をもっていない場合には false が返ります。
例外
このメソッドは例外を発生しません。
cloneNode (Node)

ノードを複製します。複製したノードは親を持ちません。

パラメータ
deep(bool)
true ならば子ノードも再起的に複製します。
戻り値
複製したノードが返ります。
例外
このメソッドは例外を発生しません。
ESDOM::NodeList

順序付きの Node のリスト。

属性値
length (unsigned long) readonly

リストのノード数。

  • 取得:getLength(void)
メソッド
item (Node)

リストのindex番目の項目を返します。

パラメータ
index(unsigned long)
リストのインデックス
戻り値
リストのindex番目の項目が返ります。indexがリストの項目数-1よりも大きければ null が返ります。
例外
このメソッドは例外を発生しません。
ESDOM::NamedNodeMap

複数ノードを持つマップ。名前で検索できる。

属性値
length (unsigned long) readonly

マップの項目数。

  • 取得:getLength(void)
メソッド
getNamedItem (Node)

名前を基にマップ内のノードを取得します。

パラメータ
name(const ESDOM_CHAR *)
取得するノードの名前
戻り値
指定された名前のノードがあればそれを、無ければnullを返します。
例外
このメソッドは例外を発生しません。
setNamedItem (Node)

マップの項目を追加・変更します。

パラメータ
arg(Node)
ノードマップに追加するノード。同じ名前 (nodeName属性値) のノードがあれば、置き換えます。
戻り値
新しいノードが同じ名前の既存のノードを置き換えた場合には、 それまでのノードが返ります。そうでなければnullが返ります。
例外
ESDOMException
NO_MODIFICATION_ALLOWED_ERR
この NamedNodeMap が読みとり専用であれば発生します。
INUSE_ATTRIBUTE_ERR
arg が、既に他の Element オブジェクトの属性である Attr である場合に発生します。
removeNamedItem (Node)

名前を元にノードマップからノードを削除します。 ESDOMはスキーマを解釈しないので、 DOMと違いデフォルト値がスキーマで定義されていようがさっくり消してそれっきりです

パラメータ
name(const ESDOM_CHAR *)
削除するノードの名前
戻り値
マップから取り除かれたノードが返ります。指定された名前のノードがなければ null が返ります。
例外
ESDOMException
NOT_FOUND_ERR
マップ内に name で指定した名前を持つノードがなければ発生します。
item (Node)

マップのindex番目の項目を返します。

パラメータ
index(unsigned long)
マップのインデックス
戻り値
マップのindex番目の項目が返ります。indexがマップの項目数-1よりも大きければ null が返ります。
例外
このメソッドは例外を発生しません。
ESDOM::Element

DOMのElementとほとんど同じです。 Node の属性値、メソッドを全て継承しています。

メソッド
getAttribute (ESDOMString)

名前を元にエレメントの属性を得ます。

パラメータ
name(const ESDOM_CHAR *)
取得する属性の名前
戻り値
指定された名前のに対応する文字列が返ります。該当する物がなければ空文字列が返ります。
例外
このメソッドは例外を発生しない
setAttribute (void)

新しい属性を追加したり、既存の属性の値を変えたりします。

パラメータ
name(const ESDOM_CHAR *)
追加・変更する属性の名前
value(const ESDOM_CHAR *)
新たな属性の値
戻り値
このメソッドは値を返しません。
例外
ESDOMException
INVALID_CHARACTER_ERR
指定された名前が不当な文字列であれば場合に発生します。
NO_MODIFICATION_ALLOWED_ERR
このノードが読みとり専用であれば発生します。
removeAttribute (void)

指定された名前の属性を削除します。 ESDOMはスキーマを解釈しないので、 DOMと違いデフォルト値がスキーマで定義されていようがさっくり消してそれっきりです

パラメータ
name (const ESDOM_CHAR *)
取り除く属性の名前
戻り値
このメソッドは値を返しません。
例外
ESDOMException
NO_MODIFICATION_ALLOWED_ERR
このノードが読みとり専用であれば発生します。
getAttributeNode (Attr)

名前を元にエレメントの属性を得ます。

パラメータ
name(const ESDOM_CHAR *)
取得する属性の名前
戻り値
指定された名前の Attr が返ります。該当する物がなければ null が返ります。
例外
このメソッドは例外を発生しません。
setAttributeNode (Attr)

新しい属性を追加したり、既存の属性の値を変えたりします。

パラメータ
newAttr (Attr)
追加・変更する属性を指定します。
戻り値
newAttr と同じ属性名が既にあり、newAttr で置き換えられた場合は、 置き換えられた今までの Attr が返ります。 そうでなければ null が返ります。
例外
ESDOMException
NO_MODIFICATION_ALLOWED_ERR
このノードが読みとり専用であれば発生します。
INUSE_ATTRIBUTE_ERR
newAttr が既に他の Element オブジェクトの属性である場合に発生します。
removeAttributeNode (Attr)

oldAttr を、属性マップから削除します。 ESDOMはスキーマを解釈しないので、 DOMと違いデフォルト値がスキーマで定義されていようがさっくり消してそれっきりです

パラメータ
oldAttr (Attr)
削除する属性。
戻り値
削除された Attr が返ります。
例外
ESDOMException
NO_MODIFICATION_ALLOWED_ERR
このノードが読みとり専用であれば発生します。
NOT_FOUND_ERR
oldAttr がこのエレメントの属性でない場合に発生します。
getElementsByTagName (NodeList)

子孫のエレメントの内、指定されたタグ名を持つ物のリストを取得します。

パラメータ
name(const ESDOM_CHAR *)
検索するタグ名。'*' を指定すると、全てのエレメントがヒットします。
戻り値
ヒットしたタグを持った NodeList が返ります。
例外
このメソッドは例外を発生しません。
normalize (void)

子孫ノードのうち、隣り合った Text 同士を統合します。

パラメータ
このメソッドはパラメータをとりません。
戻り値
このメソッドは値を返しません。
例外
このメソッドは例外を発生しません。
ESDOM::Attr

Element の属性を持つノードです。 ESDOMツリーに直接現れることはありません。

Attr は、Node の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。

ESDOM::Text

テキストを保持するノードです。

Text は、Node の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。

ESDOM::CDATASection

<![CDATA[ 』で始まり 『]]> 』で終わる部分です。

CDATASection は、Text の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。 ただし、Text を継承しているといっても Element::normalize で隣接する CDATASection 同士が 統合されることはありません。

CDATASection は、xmlの仕様上、nodeValue に']]>'を含むことは許されません。 ESDOM では、もし間違って含んでいた場合、serialize 時に']] 'というふうに '>'をスペース (0x20) に置き換えて補正します。

ESDOM::ProcessingInstruction

処理命令を表すオブジェクトです。 XML文書内では

<?xml-stylesheet type="text/xsl" href="style.xsl"?>

のように宣言されている部分です。ただし、ESDOMではXML宣言はProcessingInstructionではありません。

また、ProcessingInstruction は、ESDOMツリー内では Document の子でしかありえません。

ProcessingInstruction は、Node の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。

ProcessingInstruction は、xmlの仕様上、nodeValue に'?>'を含むことは許されません。 ESDOM では serialize 時にこれを'? >'というふうにスペース (0x20) を挿入して補正します。

ESDOM::Comment

コメントを保持するノードです。

Comment は、Node の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。

Comment は、xmlの仕様上、nodeValue に'--'を含むことや、終端が'-'であることは許されません。 ESDOM では serialize 時にこれらをそれぞれ'- -''- 'というふうにスペース (0x20) を 挿入して補正します。

ESDOM::Document

DOMのDocumentとほとんど同じです。Node の属性値、メソッドを全て継承しています。

属性値
doctype (DocumentType) readonly

ドキュメントタイプ情報が入ったDocumentTypeESDOM::serialize時以外は内部で使用されません。

  • 取得:getDoctype(void)
documentElement (Element) readonly

ドキュメントのルートエレメント。

  • 取得:getDocumentElement(void)
standalone (bool)

XMLドキュメントのスタンドアローン文書宣言。 出力時に明示的に宣言したくない場合はnullを指定しておけばよい。

  • 取得:getStandalone(void)
  • 設定:setStandalone(bool)
メソッド
createElement (Element)

エレメントを作ります。

パラメータ
tagName(const ESDOM_CHAR *)
作るエレメントのタグ名
戻り値
作られた Element が返ります。
例外
ESDOMException
INVALID_CHARACTER_ERR
このノードが読みとり専用であれば発生します。
NOT_FOUND_ERR
oldAttr がこのエレメントの属性でない場合に発生します。
createTextNode (Text)

テキストノードを作ります。

パラメータ
data(const ESDOM_CHAR *)
作るテキストノードの文字列
戻り値
作られた Text が返ります。
例外
このメソッドは例外を発生しません。
createComment (Comment)

コメントノードを作ります。

パラメータ
data(const ESDOM_CHAR *)
作るコメントノードの文字列
戻り値
作られた Comment が返ります。
例外
このメソッドは例外を発生しません。
createCDATASection (CDATASection)

CDATAセクションノードを作ります。

パラメータ
data(const ESDOM_CHAR *)
CDATAセクションの文字列
戻り値
作られた CDATASection が返ります。
例外
このメソッドは例外を発生しません。
createProcessingInstruction (ProcessingInstruction)

ProcessingInstructionノードを作ります。

パラメータ
target(const ESDOM_CHAR *)
ターゲット部分の文字列
data(const ESDOM_CHAR *)
データの文字列
戻り値
作られた ProcessingInstruction が返ります。
createAttribute (Attr)

Attr ノードを作ります。

パラメータ
name(const ESDOM_CHAR *)
属性の名前の文字列
戻り値
作られた Attr が返ります。
getElementsByTagName (NodeList)

このドキュメント内で、与えられたタグ名をもつすべてのエレメントの NodeList を返します。 リストの順番は、ドキュメントで現れた順です。

パラメータ
tagname(const ESDOM_CHAR *)
検索するタグ名。"*"であれば全てのエレメントがヒットします。
戻り値
ヒットしたエレメントを含んだ新しい NodeList オブジェクト。
例外
このメソッドは例外を発生しません。
getElementById (Element)

与えられたidをもつエレメントを返します。

パラメータ
id(const ESDOM_CHAR *)
検索するid
戻り値
与えられたidをもつエレメントが返ります。
例外
このメソッドは例外を発生しません。
setDoctype (ESDOMString)

XMLドキュメントのドキュメントタイプを設定します。

パラメータ
doctype(const ESDOM_CHAR *)
設定するドキュメントタイプ文字列。 書式はDocument::doctype の解説を参照。
戻り値
以前のドキュメントタイプ文字列が返ります。 もともとdoctypeが設定されていなかったら 空文字列 が返ります。
例外
このメソッドは例外を発生しません。
ESDOM::DocumentType

ドキュメントタイプを保持するノードです。 DOMと違って、ESDOMではドキュメントタイプはただの文字列であり、DocumentTypeノードは子を持ちません。 下記の例では背景を赤くした部分(スタイルシート非対応ブラウザでは赤くなりません)の文字列が、nodeNameに格納されます。

例1:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
'html'から最後の'xhtml11.dtd"'まで
例2:
<!DOCTYPE document [
  <!ENTITY lt "&#38;#60;">
  <!ENTITY gt "&#62;">
  <!ENTITY amp "&#38;#38;">
  <!ENTITY apos "&#39;">
  <!ENTITY quot "&#34;">
  <!ELEMENT aa (#PCDATA)>
  <!ELEMENT bb (#PCDATA)>
  <!ELEMENT cc (aa|bb)*>
  <!ELEMENT dd (#PCDATA)>
  <!ELEMENT ee (cc,(dd*))>]>
]>
'document'から最後の']'まで

DocumentType は、Node の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。


資料

エンティティリスト

エンティティ文字 エンティティ文字 エンティティ文字 エンティティ文字 エンティティ文字
&quot" &IcircÎ &oeligœ &upsilonυ &forall
&amp& &IumlÏ &ScaronŠ &phiφ &part
&apos' &ETHÐ &scaronš &chiχ &exist
&lt< &NtildeÑ &YumlŸ &psiψ &empty
&gt> &OgraveÒ &fnofƒ &omegaω &nabla
&nbsp  &OacuteÓ &circˆ &thetasymϑ &isin
&iexcl¡ &OcircÔ &tilde˜ &upsihϒ &notin
&cent¢ &OtildeÕ &AlphaΑ &pivϖ &ni
&pound£ &OumlÖ &BetaΒ &ensp &prod
&curren¤ &times× &GammaΓ &emsp &sum
&yen¥ &OslashØ &DeltaΔ &thinsp &minus
&brvbar¦ &UgraveÙ &EpsilonΕ &zwnj &lowast
&sect§ &UacuteÚ &ZetaΖ &zwj &radic
&uml¨ &UcircÛ &EtaΗ &lrm &prop
&copy© &UumlÜ &ThetaΘ &rlm &infin
&ordfª &YacuteÝ &IotaΙ &ndash &ang
&laquo« &THORNÞ &KappaΚ &mdash &and
&not¬ &szligß &LambdaΛ &lsquo &or
&shy­ &agraveà &MuΜ &rsquo &cap
&reg® &aacuteá &NuΝ &sbquo &cup
&macr¯ &acircâ &XiΞ &ldquo &int
&deg° &atildeã &OmicronΟ &rdquo &there4
&plusmn± &aumlä &PiΠ &bdquo &sim
&sup2² &aringå &RhoΡ &dagger &cong
&sup3³ &aeligæ &SigmaΣ &Dagger &asymp
&acute´ &ccedilç &TauΤ &bull &ne
&microµ &egraveè &UpsilonΥ &hellip &equiv
&para &eacuteé &PhiΦ &permil &le
&middot· &ecircê &ChiΧ &prime &ge
&cedil¸ &eumlë &PsiΨ &Prime &sub
&sup1¹ &igraveì &OmegaΩ &lsaquo &sup
&ordmº &iacuteí &alphaα &rsaquo &nsub
&raquo» &icircî &betaβ &oline &sube
&frac14¼ &iumlï &gammaγ &frasl &supe
&frac12½ &ethð &deltaδ &euro &oplus
&frac34¾ &ntildeñ &epsilonε &image &otimes
&iquest¿ &ograveò &zetaζ &weierp &perp
&AgraveÀ &oacuteó &etaη &real &sdot
&AacuteÁ &ocircô &thetaθ &trade &lceil
&Acirc &otildeõ &iotaι &talefsym &rceil
&Atildeà &oumlö &kappaκ &larr &lfloor
&AumlÄ &divide÷ &lambdaλ &uarr &rfloor
&AringÅ &oslashø &muμ &rarr &lang
&AEligÆ &ugraveù &nuν &darr &rang
&CcedilÇ &uacuteú &xiξ &harr &loz
&EgraveÈ &ucircû &omicronο &crarr &spades
&EacuteÉ &uumlü &piπ &lArr &clubs
&EcircÊ &yacuteý &rhoρ &uArr &hearts
&EumlË &thornþ &sigmafς &rArr &diams
&IgraveÌ &yumlÿ &sigmaσ &dArr
&IacuteÍ &OEligŒ &tauτ &hArr

ESDOMString の宣言

(全部ではありません)

class ESDOMString(){
public:
    ESDOMString();
    ESDOMString(const ESDOM_CHAR*);
    ESDOMString(const char*);
    ESDOMString(const ESDOMString&);
    ESDOMString(ESDOM_CHAR);
    ESDOMString(int);                   // ESDOMString(-25)とすると"-25"という文字列に
    ESDOMString(unsigned);              // ↑同様。unsigned になっただけ
    ~ESDOMString();

    operator const ESDOM_CHAR*() const;
    operator bool() const;

    ESDOMString & operator = (const ESDOMString&);
    ESDOMString & operator = (const ESDOM_CHAR*);
    ESDOMString & operator = (const char*);
    ESDOMString & operator = (ESDOM_CHAR);
    ESDOMString & operator = (int);
    ESDOMString & operator = (unsigned);
    bool          operator == (const ESDOMString&) const;
    bool          operator == (const ESDOM_CHAR*) const;
    bool          operator == (const char*) const;
    bool          operator == (ESDOM_CHAR) const;
    bool          operator == (int) const;
    bool          operator == (unsigned) const;
    bool          operator != (const ESDOMString&) const;
    bool          operator != (const ESDOM_CHAR*) const;
    bool          operator != (const char*) const;
    bool          operator != (ESDOM_CHAR) const;
    bool          operator != (int) const;
    bool          operator != (unsigned) const;

    ESDOMString & operator += (const ESDOMString&);
    ESDOMString & operator += (const ESDOM_CHAR*);
    ESDOMString & operator += (const char*);
    ESDOMString & operator += (ESDOM_CHAR);
    ESDOMString & operator += (int);
    ESDOMString & operator += (unsigned);

    unsigned long getLength(void) const;
    int           Dec_to_Int(void) const;
    unsigned      Dec_to_UInt(void) const;
    unsigned      Hex_to_UInt(void) const;
    unsigned long index(const ESDOMString&) const;
    unsigned long index(const ESDOM_CHAR*) const;
    ESDOMString   substr(unsigned long, unsigned long length =(unsigned long)-1) const;
};

ESDOMString     operator + (const ESDOMString&, const ESDOMString&);
ESDOMString     operator + (const ESDOMString&, const ESDOM_CHAR*);
ESDOMString     operator + (const ESDOMString&, const char*);
ESDOMString     operator + (const ESDOMString&, ESDOM_CHAR);
ESDOMString     operator + (const ESDOMString&, int);
ESDOMString     operator + (const ESDOMString&, unsigned);
ESDOMString     operator + (const ESDOM_CHAR*,  const ESDOMString&);
ESDOMString     operator + (const char*,        const ESDOMString&);
ESDOMString     operator + (ESDOM_CHAR,         const ESDOMString&);
ESDOMString     operator + (int,                const ESDOMString&);
ESDOMString     operator + (unsigned,           const ESDOMString&);
bool            operator == (const ESDOM_CHAR*, const ESDOMString&);
bool            operator == (const char*,       const ESDOMString&);
bool            operator == (ESDOM_CHAR,        const ESDOMString&);
bool            operator == (int,               const ESDOMString&);
bool            operator == (unsigned,          const ESDOMString&);
bool            operator != (const ESDOM_CHAR*, const ESDOMString&);
bool            operator != (const char*,       const ESDOMString&);
bool            operator != (ESDOM_CHAR,        const ESDOMString&);
bool            operator != (int,               const ESDOMString&);
bool            operator != (unsigned,          const ESDOMString&);