ESDOM(似非DOM) version 1.1 for perl


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

対応するエンコーディングは“UTF-8”、"UTF-16"(bigEndian, littleEndian両対応)のみです。

このドキュメントで string と指定されている部分には Unicode 文字列を入れて下さい。

Index

functions

ESDOM
createDocument parse parseFromBuffer serialize serializeToBuffer

objects

Node NodeList NamedNodeMap Element
Attr Text CDATASection ProcessingInstruction
Comment Document DocumentType

functions

XML::ESDOM_1_1

ESDOM Parser 兼 Serializer。オブジェクトではなくネームスペースです

関数
createDocument

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

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

与えられたファイルハンドルから、ESDOMツリーを構築します。 このメソッドを呼び出した後は、ファイルがバイナリモードになっていることに注意してください。 また、呼び出し時は
parseFromFile( *HANDLE )
というようにしてください。

パラメータ
FILE(FileHandle)
xmlドキュメントのファイルハンドル。
戻り値
成功すれば Document オブジェクトが、エラーが発生すればnullが返ります。
parseFromBuffer

与えられたデータを元に、ESDOMツリーを構築します。

パラメータ
data(binary or string)
xmlドキュメントの内容を持ったバイナリ列もしくは文字列。
戻り値
成功すれば Document オブジェクトが、エラーが発生すればnullが返ります。
serialize

ESDOMツリーからxmlドキュメントを作成して、指定されたファイルハンドルの、 現在のファイルポインタ以降に書き込みます。 このメソッドを呼び出した後は、ファイルがバイナリモードになっていることに注意してください。 また、呼び出し時は、例えば
serializeToFile( $docment, UTF_8, *HANDLE )
というようにしてください。

パラメータ
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無し)
FILE(FileHandle)
xmlドキュメントのファイルハンドル。
戻り値
成功した場合は1、そうでなければ0が返ります。
serializeToBuffer

ESDOMツリーからxmlドキュメントを作成して返します。

パラメータ
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無し)
戻り値
xmlドキュメントがバイナリで返ります。

objects

XML::ESDOM_1_1::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 (string) readonly

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

nodeValue (string)

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

nodeType (unsigned short) readonly

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

parentNode (Node) readonly

このノードの親ノード。

childNodes (NodeList) readonly

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

firstChild (Node) readonly

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

lastChild (Node) readonly

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

previousSibling (Node) readonly

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

nextSibling (Node) readonly

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

attributes (NamedNodeMap) readonly

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

メソッド
insertBefore

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

パラメータ
newChild(Node)
挿入するノード。
refChild(Node)
このノードの前に挿入されます。
戻り値
挿入されたノードが返ります。
replaceChild

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

パラメータ
newChild(Node)
置き換える新しいノード。
oldChild(Node)
置き換えられる古いノード。
戻り値
置き換えられたノードが返ります。
removeChild

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

パラメータ
oldChild(Node)
取り除く子ノード。
戻り値
取り除かれたノードが返ります。
appendChild

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

パラメータ
newChild(Node)
追加するノード。
戻り値
追加されたノードが返ります。
hasChildNodes

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

パラメータ
このメソッドはパラメータをとりません。
戻り値
ノードが子を持っている場合には 1、子をもっていない場合には 0 が返ります。
cloneNode

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

パラメータ
deep(boolean)
1 ならば子ノードも再起的に複製します。
戻り値
複製したノードが返ります。
XML::ESDOM_1_1::NodeList

順序付きの Node のリスト。

属性値
length (unsigned long) readonly

リストのノード数。

メソッド
item

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

パラメータ
index(unsigned long)
リストのインデックス
戻り値
リストのindex番目の項目が返ります。indexがリストの項目数-1よりも大きければ null が返ります。
XML::ESDOM_1_1::NamedNodeMap

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

属性値
length (unsigned long) readonly

マップの項目数。

メソッド
getNamedItem

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

パラメータ
name(string)
取得するノードの名前
戻り値
指定された名前のノードがあればそれを、無ければnullを返します。
setNamedItem

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

パラメータ
arg(Node)
ノードマップに追加するノード。同じ名前(nodeName属性値)のノードがあれば、置き換えます。
戻り値
新しいノードが同じ名前の既存のノードを置き換えた場合には、 それまでのノードが返ります。そうでなければnullが返ります。
removeNamedItem

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

パラメータ
name(string)
削除するノードの名前
戻り値
マップから取り除かれたノードが返ります。指定された名前のノードがなければ null が返ります。
item

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

パラメータ
index(unsigned long)
マップのインデックス
戻り値
マップのindex番目の項目が返ります。indexがマップの項目数-1よりも大きければ null が返ります。
XML::ESDOM_1_1::Element

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

メソッド
getAttribute

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

パラメータ
name(string)
取得する属性の名前
戻り値
指定された名前のに対応する文字列が返ります。該当する物がなければ空文字列が返ります。
setAttribute

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

パラメータ
name(string)
追加・変更する属性の名前
value(string)
新たな属性の値
戻り値
このメソッドは値を返しません。
removeAttribute

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

パラメータ
name (string)
取り除く属性の名前
戻り値
このメソッドは値を返しません。
getAttributeNode

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

パラメータ
name(string)
取得する属性の名前
戻り値
指定された名前の Attr が返ります。該当する物がなければ null が返ります。
setAttributeNode

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

パラメータ
newAttr (Attr)
追加・変更する属性を指定します。
戻り値
newAttr と同じ属性名が既にあり、newAttr で置き換えられた場合は、 置き換えられた今までの Attr が返ります。 そうでなければ null が返ります。
removeAttributeNode

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

パラメータ
oldAttr (Attr)
削除する属性。
戻り値
削除された Attr が返ります。
getElementsByTagName

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

パラメータ
name(string)
検索するタグ名。'*' を指定すると、全てのエレメントがヒットします。
戻り値
ヒットしたタグを持った NodeList が返ります。
normalize

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

パラメータ
このメソッドはパラメータをとりません。
戻り値
このメソッドは値を返しません。
XML::ESDOM_1_1::Attr

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

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

XML::ESDOM_1_1::Text

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

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

XML::ESDOM_1_1::CDATASection

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

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

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

XML::ESDOM_1_1::ProcessingInstruction

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

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

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

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

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

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

XML::ESDOM_1_1::Comment

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

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

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

XML::ESDOM_1_1::Document

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

属性値
doctype (DocumentType) readonly

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

documentElement (Element) readonly

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

standalone (boolean)

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

メソッド
createElement

エレメントを作ります。

パラメータ
tagName(string)
作るエレメントのタグ名
戻り値
作られた Element が返ります。
createTextNode

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

パラメータ
data(string)
作るテキストノードの文字列
戻り値
作られた Text が返ります。
createComment

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

パラメータ
data(string)
作るコメントノードの文字列
戻り値
作られた Comment が返ります。
createCDATASection

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

パラメータ
data(string)
CDATAセクションの文字列
戻り値
作られた CDATASection が返ります。
getElementsByTagName

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

パラメータ
tagname(string)
検索するタグ名。"*"であれば全てのエレメントがヒットします。
戻り値
ヒットしたエレメントを含んだ新しい NodeList オブジェクト。
getElementById

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

パラメータ
id(string)
検索するid
戻り値
与えられたidをもつエレメントが返ります。
setDoctype

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

パラメータ
doctype(string)
設定するドキュメントタイプ文字列。 書式はDocument::doctype の解説を参照。
戻り値
以前のドキュメントタイプ文字列が返ります。 もともとdoctypeが設定されていなかったら undefined が返ります。
XML::ESDOM_1_1::DocumentType

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

例1:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/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*))>]>
]>

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