D 2.0
About Japanese Translation

Last update Thu Feb 17 14:20:23 2011

std.xml

XMLの作成や読み込みを行うクラスと関数

このモジュールの基本的な構成は、 XML文書を一から構築するスタンドアロンの関数とクラス (Tag, Element, Document)と、既存のXMLファイルを読み込む機能 (ElementParser, DocumentParser)とからなっています。読み込みクラスを使ってXML文書を一から 構築することも可能かもしれませんが、それは意図した用途ではありません。DocumentParser と ElementParser の処理は自由にカスタマイズ可能で、 十分にやりたいことを実現できます。

Source:
std/xml.d

License:
Boost License 1.0.

Authors:
Janice Caron

Examples:
この例では、XMLファイルから DOM (Document Object Model) ツリーを作成します。
import std.xml;
import std.stdio;
import std.string;

// books.xml は Microsoft XML Core Services (MSXML) SDK で
// 様々な例に用いられているものです。
//
// http://msdn2.microsoft.com/en-us/library/ms762271(VS.85).aspx を参照して下さい。

void main()
{
    string s = cast(string)std.file.read("books.xml");

    // well-formedness をチェック
    check(s);

    // DOMツリーの作成
    auto doc = new Document(s);

    // そのまま表示
    writefln(doc);
}


Example:
次の例もほぼ同じことを行いますが、手動でファイル内容の解体と再構築を行います。 処理の内容は増えますが、 このテクニックはより強力な表現力を持っています。
import std.xml;
import std.stdio;
import std.string;

struct Book
{
    string id;
    string author;
    string title;
    string genre;
    string price;
    string pubDate;
    string description;
}

void main()
{
    string s = cast(string)std.file.read("books.xml");

    // well-formedness をチェック
    check(s);

    // 要素の分解
    Book[] books;

    auto xml = new DocumentParser(s);
    xml.onStartTag["book"] = (ElementParser xml)
    {
        Book book;
        book.id = xml.tag.attr["id"];

        xml.onEndTag["author"]       = (in Element e) { book.author      = e.text; };
        xml.onEndTag["title"]        = (in Element e) { book.title       = e.text; };
        xml.onEndTag["genre"]        = (in Element e) { book.genre       = e.text; };
        xml.onEndTag["price"]        = (in Element e) { book.price       = e.text; };
        xml.onEndTag["publish-date"] = (in Element e) { book.pubDate     = e.text; };
        xml.onEndTag["description"]  = (in Element e) { book.description = e.text; };

        xml.parse();

        books ~= book;
    };
    xml.parse();

    // 再び一つにまとめる
    auto doc = new Document(new Tag("catalog"));
    foreach(book;books)
    {
        auto element = new Element("book");
        element.tag.attr["id"] = book.id;

        element ~= new Element("author",      book.author);
        element ~= new Element("title",       book.title);
        element ~= new Element("genre",       book.genre);
        element ~= new Element("price",       book.price);
        element ~= new Element("publish-date",book.pubDate);
        element ~= new Element("description", book.description);

        doc ~= element;
    }

    // Pretty-print
    writefln(join(doc.pretty(3),"\n"));
}


bool isChar(dchar c);
文字がXML標準に従った文字であればtrueを返します

Standards:
XML 1.0

Params:
dchar c テスト対象の文字

bool isSpace(dchar c);
XML標準に従って、文字がホワイトスペース文字かどうか判定します。

以下の文字のみが、XMLではホワイトスペースとして扱われます - スペース、タブ、CR、LF

Standards:
XML 1.0

Params:
dchar c テスト対象の文字

bool isDigit(dchar c);
XML標準に従って、文字が数字かどうか判定します。

Standards:
XML 1.0

Params:
dchar c テスト対象の文字

bool isLetter(dchar c);
XML標準に従って、文字が 'letter' かどうか判定します。

Standards:
XML 1.0

Params:
dchar c テスト対象の文字

bool isIdeographic(dchar c);
XML標準に従って、 文字が 'ideographic character' かどうか判定します。

Standards:
XML 1.0

Params:
dchar c テスト対象の文字

bool isBaseChar(dchar c);
XML標準に従って、 文字が 'base character' かどうか判定します。

Standards:
XML 1.0

Params:
dchar c テスト対象の文字

bool isCombiningChar(dchar c);
XML標準に従って、 文字が 'combining character' かどうか判定します。

Standards:
XML 1.0

Params:
dchar c テスト対象の文字

bool isExtender(dchar c);
XML標準に従って、文字が 'extender' かどうか判定します。

Standards:
XML 1.0

Params:
dchar c テスト対象の文字

S encode(S)(S s);
エスケープの必要のある全ての文字を定義済みのXMLエンティティで置き換えた 結果の文字列を返します。

encode() はいくつかの文字 (ampersand, quote, apostrophe, less-than, greater-than) をエスケープし、 decode() はこれらを元に戻します。std.xml のクラスを使っている限りでは、 直接これらの関数を呼ぶ必要はありません。 全てのエンコード・デコード処理は自動的に行われます。

文字列に変更の必要がなかった場合は、引数をそのまま返します。

Standards:
XML 1.0

Parameters:
s エンコード対象の文字列

Returns:
エンコード済み文字列

Examples:
 writefln(encode("a > b")); // "a > b" を出力


enum DecodeMode;
decodeのモード

NONE
デコードしない
LOOSE
デコードする。エラーは無視
STRICT
デコードする。エラー時には例外

string decode(string s, DecodeMode mode = DecodeMode.LOOSE);
定義済みXMLエンティティを全て展開した文字列を返します。

encode() はいくつかの文字 (ampersand, quote, apostrophe, less-than, greater-than) をエスケープし、 decode() はこれらを元に戻します。std.xml のクラスを使っている限りでは、 直接これらの関数を呼ぶ必要はありません。 全てのエンコード・デコード処理は自動的に行われます。

この関数がデコードする対象は、 &, ", ', < and &gt, そして、€ のような16進や10進のエンティティです。

文字列がアンパサンドを含んでいない場合、引数をそのまま返します。

"mode" パラメタには DecodeMode.NONE (デコードしない)、 DecodeMode.LOOSE (デコードする、エラーは無視)、 DecodeMode.STRICT (デコードする、エラー時にはDecodeException例外)、のいずれかを指定できます。

Standards:
XML 1.0

Params:
string s デコード対象の文字列
DecodeMode mode (optional) デコードのモード (デフォルトは LOOSE)

Throws:
mode == DecodeMode.STRICT でデコード失敗した場合、DecodeException

Returns:
デコード済み文字列

Examples:
 writefln(decode("a > b")); // "a > b" を出力


class Document: std.xml.Element;
XML文書を表すクラス

Standards:
XML 1.0



string prolog;
ルート要素より前に出現する全てのテキストです。 デフォルトは <?xml version="1.0"?> です。

string epilog;
ルート要素より後ろに出現する全てのテキストです。 デフォルトは空文字列です。

this(string s);
XMLテキストをparseしてDocumentを構築します。

この関数は完全な DOM (Document Object Model) ツリーを作ります。

この関数への入力は必ず valid な XML でなければなりません。 これは、DocumentParser の事前条件で強制されます。

Params:
string s 完全なXMLテキスト

this(const(Tag) tag);
TagからDocumentを構築します。

Params:
const(Tag) tag 文書の開始タグ

const bool opEquals(Object o);
二つの Document の等値性を比較します。

Examples:
 Document d1,d2;
 if (d1 == d2) { }


const int opCmp(Object o);
二つの Document の順序比較を行います。

この関数を呼び出すことは非常にまれでしょう。これは、Document を連想配列のキーとして使うことを想定して実装されています。

Examples:
 Document d1,d2;
 if (d1 < d2) { }


const hash_t toHash();
Document のハッシュ値を返します。

この関数を呼び出すことは非常にまれでしょう。これは、Document を連想配列のキーとして使うことを想定して実装されています。

const string toString();
Document の文字列表現を返します。 (つまり、文書の完全なXMLです)

class Element: std.xml.Item;
XML要素を表現するクラス

Standards:
XML 1.0

Tag tag;
要素の開始タグ

Item[] items;
要素の子項目

Text[] texts;
要素のテキスト項目

CData[] cdatas;
要素のCData項目

Comment[] comments;
要素のコメント

ProcessingInstruction[] pis;
要素の processing instruction

Element[] elements;
要素の子要素

this(string name, string interior = null);
指定された名前と中身のテキストから Element を構築

Params:
string name 要素名
string interior (optional) テキストの中身

Examples:
 auto element = new Element("title","Serenity")
     // constructs the element <title>Serenity</title>


this(const(Tag) tag_);
Tag から Element を構築

Params:
const(Tag) tag 要素の開始タグまたは空タグ

void opCatAssign(Text item);
テキスト item をこの要素の内容として末尾に追加

Params:
Text item 追加したい項目

Examples:
 Element element;
 element ~= new Text("hello");


void opCatAssign(CData item);
CData item をこの要素の内容として末尾に追加

Params:
CData item 追加したい項目

Examples:
 Element element;
 element ~= new CData("hello");


void opCatAssign(Comment item);
コメントをこの要素の内容として末尾に追加

Params:
Comment item 追加したい項目

Examples:
 Element element;
 element ~= new Comment("hello");


void opCatAssign(ProcessingInstruction item);
Processing Instruction をこの要素の内容として末尾に追加

Params:
ProcessingInstruction item 追加したい項目

Examples:
 Element element;
 element ~= new ProcessingInstruction("hello");


void opCatAssign(Element item);
要素 item をこの要素の内容として末尾に追加

Params:
Element item 追加したい項目

Examples:
 Element element;
 Element other = new Element("br");
 element ~= other;
    // <br /> を表す要素を追加


bool opEquals(Object o);
二つの Element の等値性を比較

Examples:
 Element e1,e2;
 if (e1 == e2) { }


int opCmp(Object o);
二つの Element の比較

この関数を呼び出すことは非常にまれでしょう。これは、Element を連想配列のキーとして使うことを想定して実装されています。

Examples:
 Element e1,e2;
 if (e1 < e2) { }


hash_t toHash();
Element のハッシュ値を計算

この関数を呼び出すことは非常にまれでしょう。これは、Element を連想配列のキーとして使うことを想定して実装されています。

const string text(DecodeMode mode = DecodeMode.LOOSE);
要素のデコードされた中身を返します。

要素はテキストのみを格納していると仮定します。 従って、例えば、 "<title>Good &amp; Bad</title>" に対しては "Good & Bad" を返します。

Params:
DecodeMode mode (optional) デコードのモード (デフォルトは LOOSE).

Throws:
デコード失敗したら DecodeException

const string[] pretty(uint indent = 2);
この項目のインデントされた文字列表現を返します。

Params:
uint indent (optional) この要素をインデントするスペースの数。 デフォルトは 2。

const string toString();
Element の文字列表現を返します。

Examples:
 auto element = new Element("br");
 writefln(element.toString); // 出力は "<br />"


enum TagType;
タグの種類

START
開始タグ
END
終了タグ
EMPTY
空タグ



class Tag;
XMLのタグを表すクラス

Standards:
XML 1.0

クラス不変条件によって以下を保証します。
  • type がvalidな enum TagType の値であること
  • name がvalidな文字のみで構成されていること
  • 属性名それぞれがvalidな文字のみで構成されていること


TagType type;
タグの種類

string name;
タグ名

string[string] attr;
属性の連想配列

this(string name, TagType type = (TagType).START);
指定された名前と種類で Tag のインスタンスを構築します。

コンストラクタは属性を初期化しません。属性を初期化するには、 attr メンバ変数を操作します。

Params:
string name タグ名
TagType type (optional) タグの種類。 省略時のデフォルトは TagType.START です。

Examples:
 auto tag = new Tag("img",Tag.EMPTY);
 tag.attr["src"] = "http://example.com/example.jpg";


const bool opEquals(Object o);
二つの Tag の等値性を比較

この関数を呼び出すことは非常にまれでしょう。これは、Element を連想配列のキーとして使うことを想定して実装されています。

Examples:
 Tag tag1,tag2
 if (tag1 == tag2) { }


const int opCmp(Object o);
二つの Tag の比較

Examples:
 Tag tag1,tag2
 if (tag1 < tag2) { }


const hash_t toHash();
Tag のハッシュ値を返します。

この関数を呼び出すことは非常にまれでしょう。これは、Element を連想配列のキーとして使うことを想定して実装されています。

const string toString();
Tag の文字列表現を返します。

Examples:
 auto tag = new Tag("book",TagType.START);
 writefln(tag.toString); // 出力は "<book>"


const bool isStart();
開始タグならば true を返します。

Examples:
 if (tag.isStart) { }


const bool isEnd();
終了タグならば true を返します。

Examples:
 if (tag.isEnd) { }


const bool isEmpty();
空タグならば true を返します。

Examples:
 if (tag.isEmpty) { }


class Comment: std.xml.Item;
コメントノードを表すクラス

this(string content);
Comment の構築

Params:
string content コメントの内容

Throws:
内容が不正("--" を含むか、単独の "-")な場合 CommentException を投げます

Examples:
 auto item = new Comment("This is a comment");
    // <!--This is a comment--> を構築


bool opEquals(Object o);
二つの Comment の等値性を比較

Examples:
 Comment item1,item2;
 if (item1 == item2) { }


int opCmp(Object o);
二つの Comment を比較

この関数を呼び出すことは非常にまれでしょう。これは、Comment を連想配列のキーとして使うことを想定して実装されています。

Examples:
 Comment item1,item2;
 if (item1 < item2) { }


hash_t toHash();
Comment のハッシュ値を計算

この関数を呼び出すことは非常にまれでしょう。これは、Comment を連想配列のキーとして使うことを想定して実装されています。

const string toString();
このコメントの文字列表現を返します。

const bool isEmptyXML();
常に false

class CData: std.xml.Item;
CDATA セクションを表現するクラス

this(string content);
CDATA セクションの構築

Params:
string content CDATA セクションの内容

Throws:
内容が不正("]]>" を含む)場合、CDataException を投げます。

Examples:
 auto item = new CData("<b>hello</b>");
    // constructs <![CDATA[<b>hello</b>]]>


bool opEquals(Object o);
二つの CData の等値性比較

Examples:
 CData item1,item2;
 if (item1 == item2) { }


int opCmp(Object o);
二つの CData を比較

この関数を呼び出すことは非常にまれでしょう。これは、CData を連想配列のキーとして使うことを想定して実装されています。

Examples:
 CData item1,item2;
 if (item1 < item2) { }


hash_t toHash();
CData のハッシュ値を計算

この関数を呼び出すことは非常にまれでしょう。これは、CData を連想配列のキーとして使うことを想定して実装されています。

const string toString();
この CDATA セクションの文字列表現

const bool isEmptyXML();
常に false

class Text: std.xml.Item;
テキスト(PCDATA)セクションを表現するクラス

this(string content);
テキスト(PCDATA)セクションを構築

Params:
string content テキストの内容。この関数は構築前に自動的にテキストをエンコードするので、 任意のテキストを安全に挿入できます。

Examples:
 auto Text = new CData("a < b");
    // a &lt; b を構築


bool opEquals(Object o);
二つの Text の等値性を比較

Examples:
 Text item1,item2;
 if (item1 == item2) { }


int opCmp(Object o);
二つの Text を比較

この関数を呼び出すことは非常にまれでしょう。これは、Text を連想配列のキーとして使うことを想定して実装されています。

Examples:
 Text item1,item2;
 if (item1 < item2) { }


hash_t toHash();
Text のハッシュ値を計算

この関数を呼び出すことは非常にまれでしょう。これは、Text を連想配列のキーとして使うことを想定して実装されています。

const string toString();
Text セクションの文字列表現を返します

const bool isEmptyXML();
中身が空文字列ならばtrue

class XMLInstruction: std.xml.Item;
XML命令を表すクラス

this(string content);
XML命令セクションを構築

Params:
string content 命令セクションの内容

Throws:
中身が不正だった場合(">" を含む場合)XIException 例外を投げます

Examples:
 auto item = new XMLInstruction("ATTLIST");
    // <!ATTLIST> を構築


bool opEquals(Object o);
二つの XMLInstruction の等値性を比較

Examples:
 XMLInstruction item1,item2;
 if (item1 == item2) { }


int opCmp(Object o);
二つの XMLInstruction を比較

この関数を呼び出すことは非常にまれでしょう。これは、XMLInstruction を連想配列のキーとして使うことを想定して実装されています。

Examples:
 XMLInstruction item1,item2;
 if (item1 < item2) { }


hash_t toHash();
XMLInstruction のハッシュ値を計算

この関数を呼び出すことは非常にまれでしょう。これは、XMLInstruction を連想配列のキーとして使うことを想定して実装されています。

const string toString();
XMLInstruction の文字列表現

const bool isEmptyXML();
常に false

class ProcessingInstruction: std.xml.Item;
Processing Instruction を表現するクラス

this(string content);
Processing Instruction を構築

Params:
string content 内容

Throws:
内容が不正("?>" を含む場合)な時 PIException 例外を投げます

Examples:
 auto item = new ProcessingInstruction("php");
    // <?php?> を構築


bool opEquals(Object o);
二つの Processing Instruction の等値性を比較

Examples:
 ProcessingInstruction item1,item2;
 if (item1 == item2) { }


int opCmp(Object o);
二つの Processing Instruction を比較

この関数を呼び出すことは非常にまれでしょう。これは、ProcessingInstruction を連想配列のキーとして使うことを想定して実装されています。

Examples:
 ProcessingInstruction item1,item2;
 if (item1 < item2) { }


hash_t toHash();
ProcessingInstruction のハッシュ値を計算

この関数を呼び出すことは非常にまれでしょう。これは、ProcessingInstruction を連想配列のキーとして使うことを想定して実装されています。

const string toString();
ProcessingInstruction の文字列表現

const bool isEmptyXML();
常にfalse

abstract class Item;
XML項目の抽象基底クラス

abstract bool opEquals(Object o);
同じ型の他のItemとの等値性比較

abstract int opCmp(Object o);
同じ型の他のItemとの比較

abstract hash_t toHash();
このItemのハッシュ値

abstract const string toString();
このItemの文字列表現

const string[] pretty(uint indent);
このItemのインデントされた文字列表現を返します

Params:
uint indent 子要素をインデントするスペースの個数

abstract const bool isEmptyXML();
空XMLテキストを表現しているときのみtrueを返します。

class DocumentParser: std.xml.ElementParser;
XML文書の構文解析のためのクラスです。

基底クラスは ElementParser で、 ほとんどの有用な関数はそちらでドキュメント化されています。

Standards:
XML 1.0

BUGS:
現在のところ、UTF ドキュメントのみのサポートです。

prolog の encoding 属性は無視されます。



this(string xmlText_);
DocumentParser の構築

入力は必ず valid な XML でなければなりません。 これはこの関数の事前条件で強制されます。

Params:
xmltext XML文書全体のテキスト

class ElementParser;
XML要素の構文解析のためのクラス

Standards:
XML 1.0

直接このクラスのインスタンスを作ることはできないのでご注意下さい。DocumentParser (ElementParser の派生クラス)を使うか、 あなたの独自のライブラリで ElementParser を作って、onStartTag ハンドラに独自のやり方で渡すことは可能です。



const const(Tag) tag();
現在解析中の要素の開始タグを表す Tag オブジェクト。 タグ名や要素を参照するのに使用できます。

void delegate(ElementParser parser)[string] onStartTag;
指定した名前の開始タグが見つかったときに呼び出すハンドラを登録します。 名前の代わりに null を指定すると、 他のハンドラがマッチしなかった時の ハンドラとして登録されます。

Examples:
 // <podcast> 開始タグが見つかったら以下の関数を呼び出す
 onStartTag["podcast"] = (ElementParser xml)
 {
     // コードをここに記述
     //
     // これはクロージャなので、このコードから
     // 外側のスコープの変数を参照できます
 };

 // <episode> 開始タグが見つかったら
 // myEpisodeStartHandler (どこか他で定義されている) を呼び出す
 onStartTag["episode"] = &myEpisodeStartHandler;

 // その他全ての開始タグでは dg を呼び出す
 onStartTag[null] = dg;
ライブラリは、 関数に新しい ElementHandler のインスタンスを渡します。 これを使って、現在のタグの中の要素をさらに解析したり、 現在の要素のタグ属性を取得することなどが可能です。

この関数が開始タグのほかに空タグでも呼ばれることに注意してください。 つまり、 <br></br> と <br/> は全く区別されません。

void delegate(in const(Element) element)[string] onEndTag;
指定した名前の終了タグが見つかったときに呼び出すハンドラを登録します。 名前の代わりに null を指定すると、 他のハンドラがマッチしなかった時の ハンドラとして登録されます。

Examples:
 // </podcast> 終了タグが見つかったら以下の関数を呼び出す
 onEndTag["podcast"] = (in Element e)
 {
     // コードをここに記述
     //
     // これはクロージャなので、このコードから
     // 外側のスコープの変数を参照できます
 };

 // </episode> 終了タグが見つかったら
 // myEpisodeEndHandler (どこか他で定義されている) を呼び出す
 onEndTag["episode"] = &myEpisodeEndHandler;

 // その他全ての終了タグでは dg を呼び出す
 onEndTag[null] = dg;
この関数が終了タグのほかに空タグでも呼ばれることに注意してください。 つまり、 <br></br> と <br/> は全く区別されません。

void onText(Handler handler);
テキストノードが見つかったときに呼び出すハンドラを登録

Examples:
 // テキストノードが見つかったときにこの関数を呼び出す
 onText = (string s)
 {
     // コードをここに記述

     // 渡される引数 s はデコード済みです
     // 従って、任意の文字を含む可能性があります
     //
     // これはクロージャなので、このコードから
     // 外側のスコープの変数を参照できます
 };


void onTextRaw(Handler handler);
テキストノードが見つかったときに呼び出す別の種類のハンドラを登録します。 onText との違いは、onText はテキストをデコードしますが、 onTextRaw はしない点です。 これによって、より正確だが遅い onText と より速いが不正確な onTextRaw という選択が可能になります。 もちろん、onTextRaw のハンドラの中で decode() を呼ぶことはできますが、 普通は onTextRaw はデコードが不要な状況でのみ使用することになります。

Examples:
 // テキストノードが見つかったときにこの関数を呼び出す
 onText = (string s)
 {
     // コードをここに記述

     // 渡される引数 s はデコード"されていません"
     //
     // これはクロージャなので、このコードから
     // 外側のスコープの変数を参照できます
 };


void onCData(Handler handler);
CDATAセクションが見つかったときに 呼び出すハンドラを登録

Examples:
 // CDATAセクションが見つかったときにこの関数を呼び出す
 onCData = (string s)
 {
     // コードをここに記述

     // 渡される引数 s は開始 <![CDATA[ や
     // 終了 ]]> を含みません
     //
     // これはクロージャなので、このコードから
     // 外側のスコープの変数を参照できます
 };


void onComment(Handler handler);
コメントが見つかったときに 呼び出すハンドラを登録

Examples:
 // コメントが見つかったときにこの関数を呼び出す
 onComment = (string s)
 {
     // コードをここに記述

     // 渡される引数 s は開始 <!-- や
     // 終了 --> を含みません
     //
     // これはクロージャなので、このコードから
     // 外側のスコープの変数を参照できます
 };


void onPI(Handler handler);
Processing instruction が見つかったときに呼び出すハンドラを登録

Examples:
 // Processing Instruction が見つかったときにこの関数を呼び出す
 onPI = (string s)
 {
     // コードをここに記述

     // 渡される引数 s は開始 <? や
     // 終了 > を含みません
     //
     // これはクロージャなので、このコードから
     // 外側のスコープの変数を参照できます
 };


void onXI(Handler handler);
XML instruction が見つかったときに呼び出すハンドラを登録

Examples:
 // XML Instruction が見つかったときにこの関数を呼び出す
 // (注意点: XML Instruction は文書のルート要素より先に見つかるかもしれません)

 onPI = (string s)
 {
     // コードをここに記述

     // 渡される引数 s は開始 <! や
     // 終了 > を含みません
     //
     // これはクロージャなので、このコードから
     // 外側のスコープの変数を参照できます
 };


void parse();
XML要素の構文解析を実行します。

解析は、現在の要素の終わりに達するまで続きます。 途中で見つかった Item に関しては全て、 対応するハンドラが登録されていれば呼び出されます。

Throws:
様々な種類の XMLException

const string toString();
XML要素のうち、既に解析の済んだ部分の文字列表現を返します。

void check(string s);
XML文書全体が整形式(well-formed)となっているかチェックします。

Params:
string s チェック対象のXML文書。文字列で渡します。

Throws:
well-formed でない場合、CheckException を投げます。

CheckException の toString() メソッドは、構文解析失敗の完全な階層構造を出力します。 (スタックトレースのようなものです。)全ての階層で、 失敗した行番号と桁を表示します。

class XMLException: object.Exception;
このモジュールが投げる例外の基底クラス

class CommentException: std.xml.XMLException;
Comment コンストラクタで発生する例外

class CDataException: std.xml.XMLException;
CData コンストラクタで発生する例外

class XIException: std.xml.XMLException;
XMLInstruction コンストラクタで発生する例外

class PIException: std.xml.XMLException;
ProcessingInstruction コンストラクタで発生する例外

class TextException: std.xml.XMLException;
Text コンストラクタで発生する例外

class DecodeException: std.xml.XMLException;
decode() で発生する例外

class InvalidTypeException: std.xml.XMLException;
型の違うItemを比較しようとしたときに発生する例外

class TagException: std.xml.XMLException;
Tag の構文解析中に発生する例外

class CheckException: std.xml.XMLException;
check() で発生する例外

CheckException err;
階層の親

string msg;
構文解析に失敗した生成規則か、 具体的なエラーメッセージ

size_t line;
構文解析に失敗した行番号

size_t column;
構文解析に失敗した桁