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 |
ESDOMException | ESDOMString | Node | NodeList |
NamedNodeMap | Element | Attr | Text |
CDATASection | ProcessingInstruction | Comment | Document |
DocumentType |
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);//この時点で既に消滅しているのでエラーになります }
ESDOM で使用する各種定数の値を指定します。
ESDOM では、使用用途に応じてメモリの使用を最適化できるようにしています。 そのためメモリに関する定数を ESDOM の関数やオブジェクトを使う前 (プログラムの開始時が望ましい) に、 一度だけ必ず呼び出す必要があります。 従って、本来なら ESDOM のオブジェクトはグローバル変数として使えないことになりますが (initialize関数を呼ぶ前に作られるため)、 それじゃ使い物にならないので小細工してグローバル変数として使えるようにしています。 が、そうやって無理をしてるのでグローバル変数として使う場合は初期値を設定することが出来ません。 initialize関数を呼んでから代入してください。
新しいESDOMツリーを構築します。
与えられたファイルハンドルから、ESDOMツリーを構築します。 ESDOM::openFile で開いたものである必要があります。
ESDOMツリーからxmlドキュメントを作成して、指定されたファイルに書き込みます。 ここで指定するファイルは ESDOM::openFile 関数で取得した物を 指定してください。
UTF_8
UTF_16BE
UTF_16LE
UTF_16BE_NONBOM
UTF_16LE_NONBOM
指定したファイルを開きます。 parse、serialize では これで取得したファイルハンドルを使用してください。
FILE_CREATE_NEW
FILE_CREATE_ALWAYS
FILE_OPEN_EXISTING
FILE_OPEN_EXISTING
FILE_READ
FILE_WRITE
指定したファイルを閉じます。 ESDOM::openFile で開いたファイルはこれで閉じてください。
指定したファイルをロックします。
FILE_LOCK_NB
を指定しなかった場合は、余所からのロックが解放されるまで待ちます。
FILE_LOCK_SH
を指定しても排他ロックをします。
FILE_LOCK_EX
FILE_LOCK_NB
と同時に指定できます。FILE_LOCK_SH
FILE_LOCK_NB
と同時に指定できます。FILE_LOCK_NB
FILE_LOCK_UN
最後に発生したエラーの詳細を取得します。 (version 1.1では parse 時のエラーメッセージしか取得できません)
エラーの詳細をクリアします。
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 が持つメソッドを呼んだ場合など |
どんな要因で発生したかを示すコード。詳細は上記の通り。
ESDOM_CHAR 文字列を簡単に扱うためのオブジェクト。std::string みたいなもの。 += や + で文字列を結合できます。 参照:『ESDOMString の宣言』
引数の型が const ESDOM_CHAR* となっているところすべてに指定できます。
文字数を返します。
文字列が10進数値であればその値を返します。
文字列が10進数値であればその値を返します。
文字列が16進数値であればその値を返します。
部分文字列を検索します。
部分文字列を取り出します。
ノードタイプの値は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 | - | - | ProcessingInstruction、 Comment、 DocumentType、及びルートエレメントを保持する NodeList |
DOCUMENT_TYPE_NODE | 10 | ドキュメントタイプ名(Document::doctype参照) | - | - | - |
このノードの名前。タイプに依存するので上記の表を参照のこと。
このノードの値。タイプに依存するので上記の表を参照のこと。
このノードのタイプを示す整数。上記の表を参照。
このノードの親ノード。
エレメントノードであれば、このノードのすべての子を含んだ NodeList。 それ以外はnull。
このノードの最初の子。 子ノードが無ければ null。
このノードの最後の子。 子ノードが無ければ null。
このノードの直前にある兄弟ノード。 該当するノードが無ければ null。
このノードの直後にある兄弟ノード。 該当するノードが無ければ null。
エレメントノードであれば、このノードの属性ノードを含んだ NamedNodeMap。 それ以外はnull。
子ノードリスト内の、 refChild の前に newChild を挿入します。 refChild が null である場合は、newChild を子ノードのリストの最後に追加します。
子ノードリストの中の oldChild を newChild で置き換えます。 newChild が既にESDOMツリーの中にある場合には、ツリーから外された後に置き換えられます。
子ノードを子のリストから取り除きます。
ノード newChild をこのノードの子のリストの末尾に追加します。 newChild が既にESDOMツリーの中にある場合には、ツリーから外された後に追加されます。
ノードが子を持っているか否かを確認します。
ノードを複製します。複製したノードは親を持ちません。
順序付きの Node のリスト。
リストのノード数。
リストのindex番目の項目を返します。
複数ノードを持つマップ。名前で検索できる。
マップの項目数。
名前を基にマップ内のノードを取得します。
マップの項目を追加・変更します。
名前を元にノードマップからノードを削除します。 ESDOMはスキーマを解釈しないので、 DOMと違いデフォルト値がスキーマで定義されていようがさっくり消してそれっきりです。
マップのindex番目の項目を返します。
DOMのElementとほとんど同じです。 Node の属性値、メソッドを全て継承しています。
名前を元にエレメントの属性を得ます。
新しい属性を追加したり、既存の属性の値を変えたりします。
指定された名前の属性を削除します。 ESDOMはスキーマを解釈しないので、 DOMと違いデフォルト値がスキーマで定義されていようがさっくり消してそれっきりです。
名前を元にエレメントの属性を得ます。
新しい属性を追加したり、既存の属性の値を変えたりします。
oldAttr を、属性マップから削除します。 ESDOMはスキーマを解釈しないので、 DOMと違いデフォルト値がスキーマで定義されていようがさっくり消してそれっきりです。
子孫のエレメントの内、指定されたタグ名を持つ物のリストを取得します。
子孫ノードのうち、隣り合った Text 同士を統合します。
Element の属性を持つノードです。 ESDOMツリーに直接現れることはありません。
Attr は、Node の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。
テキストを保持するノードです。
Text は、Node の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。
『<![CDATA[
』で始まり 『]]>
』で終わる部分です。
CDATASection は、Text の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。 ただし、Text を継承しているといっても Element::normalize で隣接する CDATASection 同士が 統合されることはありません。
CDATASection は、xmlの仕様上、nodeValue に']]>'
を含むことは許されません。
ESDOM では、もし間違って含んでいた場合、serialize 時に']] '
というふうに
'>'
をスペース (0x20) に置き換えて補正します。
処理命令を表すオブジェクトです。 XML文書内では
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
のように宣言されている部分です。ただし、ESDOMではXML宣言はProcessingInstructionではありません。
また、ProcessingInstruction は、ESDOMツリー内では Document の子でしかありえません。
ProcessingInstruction は、Node の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。
ProcessingInstruction は、xmlの仕様上、nodeValue に'?>'
を含むことは許されません。
ESDOM では serialize 時にこれを'? >'
というふうにスペース (0x20) を挿入して補正します。
コメントを保持するノードです。
Comment は、Node の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。
Comment は、xmlの仕様上、nodeValue に'--'
を含むことや、終端が'-'
であることは許されません。
ESDOM では serialize 時にこれらをそれぞれ'- -'
、'- '
というふうにスペース (0x20) を
挿入して補正します。
DOMのDocumentとほとんど同じです。Node の属性値、メソッドを全て継承しています。
ドキュメントタイプ情報が入ったDocumentType。 ESDOM::serialize時以外は内部で使用されません。
ドキュメントのルートエレメント。
XMLドキュメントのスタンドアローン文書宣言。 出力時に明示的に宣言したくない場合はnullを指定しておけばよい。
エレメントを作ります。
テキストノードを作ります。
コメントノードを作ります。
CDATAセクションノードを作ります。
ProcessingInstructionノードを作ります。
Attr ノードを作ります。
このドキュメント内で、与えられたタグ名をもつすべてのエレメントの NodeList を返します。 リストの順番は、ドキュメントで現れた順です。
与えられたidをもつエレメントを返します。
XMLドキュメントのドキュメントタイプを設定します。
ドキュメントタイプを保持するノードです。 DOMと違って、ESDOMではドキュメントタイプはただの文字列であり、DocumentTypeノードは子を持ちません。 下記の例では背景を赤くした部分(スタイルシート非対応ブラウザでは赤くなりません)の文字列が、nodeNameに格納されます。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
'html'
から最後の'xhtml11.dtd"'
まで
<!DOCTYPE document [
<!ENTITY lt "&#60;">
<!ENTITY gt ">">
<!ENTITY amp "&#38;">
<!ENTITY apos "'">
<!ENTITY quot """>
<!ELEMENT aa (#PCDATA)>
<!ELEMENT bb (#PCDATA)>
<!ELEMENT cc (aa|bb)*>
<!ELEMENT dd (#PCDATA)>
<!ELEMENT ee (cc,(dd*))>]>
]>
'document'
から最後の']'
まで
DocumentType は、Node の属性値、メソッドを全て継承しています。 オーバーロードされた属性、メソッドはありません。
エンティティ | 文字 | エンティティ | 文字 | エンティティ | 文字 | エンティティ | 文字 | エンティティ | 文字 |
---|---|---|---|---|---|---|---|---|---|
" | " | Î | Î | &oelig | œ | &upsilon | υ | &forall | ∀ |
& | & | Ï | Ï | &Scaron | Š | &phi | φ | &part | ∂ |
&apos | ' | Ð | Ð | &scaron | š | &chi | χ | &exist | ∃ |
< | < | Ñ | Ñ | &Yuml | Ÿ | &psi | ψ | &empty | ∅ |
> | > | Ò | Ò | &fnof | ƒ | &omega | ω | &nabla | ∇ |
  | Ó | Ó | &circ | ˆ | &thetasym | ϑ | &isin | ∈ | |
¡ | ¡ | Ô | Ô | &tilde | ˜ | &upsih | ϒ | ¬in | ∉ |
¢ | ¢ | Õ | Õ | &Alpha | Α | &piv | ϖ | &ni | ∋ |
£ | £ | Ö | Ö | &Beta | Β | &ensp | &prod | ∏ | |
¤ | ¤ | × | × | &Gamma | Γ | &emsp | &sum | ∑ | |
¥ | ¥ | Ø | Ø | &Delta | Δ | &thinsp | &minus | − | |
¦ | ¦ | Ù | Ù | &Epsilon | Ε | &zwnj | | &lowast | ∗ |
§ | § | Ú | Ú | &Zeta | Ζ | &zwj | | &radic | √ |
¨ | ¨ | Û | Û | &Eta | Η | &lrm | | &prop | ∝ |
© | © | Ü | Ü | &Theta | Θ | &rlm | | &infin | ∞ |
ª | ª | Ý | Ý | &Iota | Ι | &ndash | – | &ang | ∠ |
« | « | Þ | Þ | &Kappa | Κ | &mdash | — | &and | ∧ |
¬ | ¬ | ß | ß | &Lambda | Λ | &lsquo | ‘ | &or | ∨ |
­ | | à | à | &Mu | Μ | &rsquo | ’ | &cap | ∩ |
® | ® | á | á | &Nu | Ν | &sbquo | ‚ | &cup | ∪ |
¯ | ¯ | â | â | &Xi | Ξ | &ldquo | “ | &int | ∫ |
° | ° | ã | ã | &Omicron | Ο | &rdquo | ” | &there4 | ∴ |
± | ± | ä | ä | &Pi | Π | &bdquo | „ | &sim | ∼ |
² | ² | å | å | &Rho | Ρ | &dagger | † | &cong | ≅ |
³ | ³ | æ | æ | &Sigma | Σ | &Dagger | ‡ | &asymp | ≈ |
´ | ´ | ç | ç | &Tau | Τ | &bull | • | &ne | ≠ |
µ | µ | è | è | &Upsilon | Υ | &hellip | … | &equiv | ≡ |
¶ | ¶ | é | é | &Phi | Φ | &permil | ‰ | &le | ≤ |
· | · | ê | ê | &Chi | Χ | &prime | ′ | &ge | ≥ |
¸ | ¸ | ë | ë | &Psi | Ψ | &Prime | ″ | &sub | ⊂ |
¹ | ¹ | ì | ì | &Omega | Ω | &lsaquo | ‹ | &sup | ⊃ |
º | º | í | í | &alpha | α | &rsaquo | › | &nsub | ⊄ |
» | » | î | î | &beta | β | &oline | ‾ | &sube | ⊆ |
¼ | ¼ | ï | ï | &gamma | γ | &frasl | ⁄ | &supe | ⊇ |
½ | ½ | ð | ð | &delta | δ | &euro | € | &oplus | ⊕ |
¾ | ¾ | ñ | ñ | &epsilon | ε | &image | ℑ | &otimes | ⊗ |
¿ | ¿ | ò | ò | &zeta | ζ | &weierp | ℘ | &perp | ⊥ |
À | À | ó | ó | &eta | η | &real | ℜ | &sdot | ⋅ |
Á | Á | ô | ô | &theta | θ | &trade | ™ | &lceil | ⌈ |
 |  | õ | õ | &iota | ι | &talefsym | ℵ | &rceil | ⌉ |
à | à | ö | ö | &kappa | κ | &larr | ← | &lfloor | ⌊ |
Ä | Ä | ÷ | ÷ | &lambda | λ | &uarr | ↑ | &rfloor | ⌋ |
Å | Å | ø | ø | &mu | μ | &rarr | → | &lang | 〈 |
Æ | Æ | ù | ù | &nu | ν | &darr | ↓ | &rang | 〉 |
Ç | Ç | ú | ú | &xi | ξ | &harr | ↔ | &loz | ◊ |
È | È | û | û | &omicron | ο | &crarr | ↵ | &spades | ♠ |
É | É | ü | ü | &pi | π | &lArr | ⇐ | &clubs | ♣ |
Ê | Ê | ý | ý | &rho | ρ | &uArr | ⇑ | &hearts | ♥ |
Ë | Ë | þ | þ | &sigmaf | ς | &rArr | ⇒ | &diams | ♦ |
Ì | Ì | ÿ | ÿ | &sigma | σ | &dArr | ⇓ | ||
Í | Í | &OElig | Œ | &tau | τ | &hArr | ⇔ |
(全部ではありません)
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&);