![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
#include <SFXXMLDOMParser.hpp>
class SFXXMLDOMParser : public static_exception< SFCError >;
SFMTYPEDEFCLASS(SFXXMLDOMParser)


DOM パーサー(SFXXMLDOMParser)は、XML 文書をデータの順序に関係なくアクセスできる「 DOM ツリー 」と呼ばれるツリー構造に変換します。
![]() |
Document Object Model ( DOM ) の仕様 |
|---|---|
W3C DOM レベル 1 勧告 : Document Object Model ( DOM ) Level 1 Specification | |
例 748. DOM パーサー を使って XML 文書を解析する方法
// 解析対象の XML 文書 ( file.xml ) <fruit> <name language="english" code="ascii">apple</name> <size>XS</size> <color>red</color> </fruit> SFCError error; // エラー値 SFXXMLDOMParser parser; // DOM パーサー SFXAnsiString resultString; // 属性値を一時的に格納するための変数 // file.xml に保存した XML 文書を解析する if ((error = parser.Parse("/file.xml")) == SFERR_NO_ERROR) { // DOM ツリーのルート ノードを取得する SFXXMLDocumentPtr root = parser.GetDocument(); // DOM ツリーのルート ノードの最初の子ノード ( XML 文書のルート要素: "fruit" 要素 ) を取得する SFXXMLNodePtr child = root->GetFirstChild(); // "fruit" 要素の最初の子ノード ( "name" 要素 ) を取得する child = child->GetFirstChild(); // child ノードの名前(要素名)が "name" のとき if (SFXAnsiString("name").Equals(child->GetNodeName())) { // 属性を取得するために Element ノードにキャストする SFXXMLElementPtr element = static_cast<SFXXMLElementPtr>(child); // "language" という名前(属性名)の Attribute ノードの値を取得する // resultString は "english" になる resultString = element->GetAttribute("language"); // 名前(属性名)が "language" である Attribute ノードを取得する SFXXMLAttributePtr attr = element->GetAttributeNode("language"); // Attribute ノードの値(属性値)を取得する resultString = attr->GetNodeValue(); // すべての Attribute ノードを取得する SFXXMLNode::DOMNamedNodeMapPtr nodeMap = element->GetAttributes(); // "code"という名前(属性名)の Attribute ノードを取得する attr = static_cast<SFXXMLAttributePtr>(nodeMap->GetNamedItem("code")); // Attribute ノードの値(属性値)を取得する resultString = attr->GetNodeValue(); } }
| コンストラクタ/デストラクタ |
|---|
|
SFXXMLDOMParser( Void ) SFXXMLDOMParser クラスのコンストラクタです。
|
|
~SFXXMLDOMParser( Void ) SFXXMLDOMParser クラスのデストラクタです。
|
| パブリック関数 | |
|---|---|
| Bool |
GetCreateCommentNodes( Void ) Comment ノードを生成するかどうかを取得します。
|
| Bool |
GetDoIndent( Void ) 文書をインデントするかどうかを取得します。
|
| Bool |
GetDoNamespaces( Void ) 名前空間を処理するかどうかを取得します。
|
| Bool |
GetDoSchema( Void ) スキーマを処理するかどうかを取得します。
|
| SFXXMLDocumentPtr |
GetDocument( Void ) Document ノードを取得します。
|
| ACharConstPtr |
GetErrorInfo( Void ) 内部で起こったエラー メッセージを取得します。
|
| static SFXXMLElementPtr |
GetFirstChildElement(
SFXXMLNodeConstPtr parent
) 指定したノードの最初の子 Element ノードを取得します。
|
| static SFXXMLElementPtr |
GetFirstChildElementNS(
SFXXMLNodeConstPtr parent
, SFXAnsiStringHandleConst elemNames
, SFXAnsiStringConstRef uri
, SInt32 length
) 指定したノードの最初の子 Element ノードを取得します。その Element ノードは、指定した名前空間 URI および要素のローカル名(複数指定可能)と一致する必要があります。
|
| Bool |
GetIgnoreAnnotations( Void ) スキーマ付き XML 文書の Annotation 要素を無効にするかどうかを取得します。
|
| Bool |
GetLoadExternalDTD( Void ) 外部 DTD ファイルをロードするかどうかを取得します。
|
| static SFXXMLElementPtr |
GetNextSiblingElement(
SFXXMLNodeConstPtr node
) 指定したノードの次の兄弟 Element ノードを取得します。
|
| static SFXXMLElementPtr |
GetNextSiblingElementNS(
SFXXMLNodeConstPtr node
, SFXAnsiStringHandleConst elemNames
, SFXAnsiStringConstRef uri
, SInt32 length
) 指定したノードの次の兄弟 Element ノードを取得します。その Element ノードは、指定した名前空間 URI および要素のローカル名(複数指定可能)と一致する必要があります。
|
| Bool |
GetStandalone( Void ) Standalone 宣言を取得します。
|
| Bool |
GetValidationDTD( Void ) DTD で検証するかどうかを取得します。
|
| Bool |
GetValidationSchema( Void ) スキーマで検証するかどうかを取得します。
|
| SFCError |
Parse(
SFBFileSmpConstRef source
) Parse( SFXStreamReaderConstRef source ) Parse( SFXPathConstRef source ) Parse( SFXAnsiStringConstRef source ) XML 文書を読み込み、DOM パーサーを使って解析します。
|
| Void |
Reset( Void ) すべての内部変数をリセットします。
|
| Void |
SetCreateCommentNodes(
BoolConst create
) Comment ノードを生成するかどうかを設定します。
|
| Void |
SetDoIndent(
BoolConst state
) 文書をインデントするかどうかを設定します。
|
| Void |
SetDoNamespaces(
BoolConst state
) 名前空間を処理するかどうかを設定します。
|
| Void |
SetDoSchema(
BoolConst state
) スキーマを処理するかどうかを設定します。
|
| Void |
SetGrammar(
SFXXMLGrammar::GrammarType grammar
) SetGrammar( SFXXMLGrammar::GrammarType grammar ) パーサーが使う文法を設定します。
|
| Void |
SetIgnoreAnnotations(
BoolConst state
) Annotation 要素を無効にするかどうかを設定します
|
| Void |
SetLoadExternalDTD(
BoolConst state
) 外部 DTD ファイルをロードするかどうかを設定します。
|
| Void |
SetSchemaLocation(
SFXAnsiStringConstRef name
) XSD ファイルを設定します。
|
| Void |
SetValidationDTD(
BoolConst state
) DTD で検証するかどうかを設定します。
|
| Void |
SetValidationSchema(
BoolConst state
) スキーマで検証するかどうかを設定します。
|
| プロテクト関数 | |
|---|---|
| Void |
SetGrammar(
SFXXMLGrammar::GrammarType grammar
) SetGrammar( SFXXMLGrammar::GrammarType grammar ) パーサーが使う文法を設定します。
|
[ public, explicit ] SFXXMLDOMParser(Void);
[ public ] ~SFXXMLDOMParser(Void);
[ public, const ] Bool GetCreateCommentNodes(Void);
[ public, const ] Bool GetDoIndent(Void);
[ public, const ] Bool GetDoNamespaces(Void);
[ public, const ] Bool GetDoSchema(Void);
[ public, const ] SFXXMLDocumentPtr GetDocument(Void);
Document ノードは DOM ツリーのルート ノードです。
[ public, const ] ACharConstPtr GetErrorInfo(Void);
[ public, static ] SFXXMLElementPtr GetFirstChildElement( SFXXMLNodeConstPtr parent // 親ノード );
SFXXMLDOMParser::GetFirstChildElementNS | SFXXMLDOMParser::GetNextSiblingElement | SFXXMLDOMParser::GetNextSiblingElementNS
[ public, static ] SFXXMLElementPtr GetFirstChildElementNS( SFXXMLNodeConstPtr parent // 親ノード SFXAnsiStringHandleConst elemNames // 要素のローカル名のハンドル(Handle 型) SFXAnsiStringConstRef uri // 名前空間 URI SInt32 length // 要素のローカル名の個数 );
![]() |
注意 |
|---|---|
| 引数で指定する、名前空間 URI、および要素のローカル名(複数指定可能)と一致する必要があります。 | |
SFXXMLDOMParser::GetFirstChildElement | SFXXMLDOMParser::GetNextSiblingElement | SFXXMLDOMParser::GetNextSiblingElementNS
[ public, const ] Bool GetIgnoreAnnotations(Void);
[ public, const ] Bool GetLoadExternalDTD(Void);
[ public, static ] SFXXMLElementPtr GetNextSiblingElement( SFXXMLNodeConstPtr node // ノード );
SFXXMLDOMParser::GetNextSiblingElementNS | SFXXMLDOMParser::GetFirstChildElement | SFXXMLDOMParser::GetFirstChildElementNS
[ public, static ] SFXXMLElementPtr GetNextSiblingElementNS( SFXXMLNodeConstPtr node // 親ノード SFXAnsiStringHandleConst elemNames // 要素のローカル名のハンドル(Handle 型) SFXAnsiStringConstRef uri // 名前空間 URI SInt32 length // 要素のローカル名の個数 );
![]() |
注意 |
|---|---|
| 引数で指定する、名前空間 URI、および要素のローカル名(複数指定可能)と一致する必要があります。 | |
SFXXMLDOMParser::GetNextSiblingElement | SFXXMLDOMParser::GetFirstChildElement | SFXXMLDOMParser::GetFirstChildElementNS
[ public, const ] Bool GetStandalone(Void);
[ public, const ] Bool GetValidationDTD(Void);
[ public, const ] Bool GetValidationSchema(Void);
[ public ] SFCError Parse( SFBFileSmpConstRef source // 解析する XML ファイル );
[ public ] SFCError Parse( SFXAnsiStringConstRef source // 解析する XML 文書 );
[ public ] SFCError Parse( SFXPathConstRef source // 解析する XML ファイル パス );
[ public ] SFCError Parse( SFXStreamReaderConstRef source // 入力ストリーム );
XML 文書の解析結果のエラーコードは以下の通りです。
DTD 付き XML 文書の解析結果のエラーコードは以下の通りです。
スキーマ付き XML 文書の解析結果のエラーコードは以下の通りです。
詳細情報: SFCErrorEnum
XML 文書ファイルを読み込み、解析する関数です。引数には入力ストリーム、ファイル パス、文字列を渡します。 ファイル パスのデフォルト ディレクトリはアプリのホーム ディレクトリです。
[ public ] Void Reset(Void);
[ public ] Void SetGrammar( SFXXMLGrammar::GrammarType grammar // 文法タイプ );
[ protected ] Void SetGrammar( SFXXMLGrammar::GrammarType grammar // 文法クラスへのポインター );
[ public ] Void SetSchemaLocation( SFXAnsiStringConstRef name // ローカル XSD ファイル );
// 解析対象の XML 文書 ( file.xml ) <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE Mail SYSTEM "personal.dtd"> <Mail> <From>&name;</From> <To>Receiver</To> <Cc>&Email;</Cc> <Date> Thu, 7 Oct 1999 11:15:16 -0600</Date> <Subject>XML Introduction</Subject> <Body>Comments:<P align = "right">Thanks for reading<br/>this article</P> <br/> <P>Hope you enjoyed this article</P> <P>©right;</P> </Body> </Mail> // 検証用の DTD ファイル ( personal.dtd ) <?xml encoding="ISO-8859-1"?> <!-- @version: 10.1--> <!ELEMENT Mail (From, To, Cc?, Date?, Subject, Body)> <!ELEMENT From (#PCDATA)> <!ELEMENT To (#PCDATA)> <!ELEMENT Cc (#PCDATA)> <!ELEMENT Date (#PCDATA)> <!ELEMENT Subject (#PCDATA)> <!ELEMENT Body (#PCDATA | P | Br)*> <!ELEMENT P (#PCDATA | br)*> <!ATTLIST P align (left | right | justify) "left"> <!ELEMENT br EMPTY> <!ENTITY name "sophia"> <!ENTITY Email "&name;@s-cradle.com"> <!ENTITY copyright "Copyright (C) 2005 - 2006 Sophia Cradle Incorporated."> // DTD 付き XML 文書の解析 SFXXMLDOMParser parser; SFCError error; // DTD 付き XML 文書を解析するため、文法タイプを設定する parser.SetGrammar(SFXXMLGrammar::GRAMMAR_DTD); // XML 文書を DTD で検証するように設定する parser.SetValidationDTD(true); // DTD を外部から読み込むように設定する parser.SetLoadExternalDTD(true); // DOM パーサーを使って DTD 付き XML 文書を解析する error = parser.Parse(SFXPath("/file.xml")); if (error == SFERR_NO_ERROR) { // ルート要素を取得する SFXXMLDocumentPtr root = parser.GetDocument(); // ドキュメント型を取得する SFXXMLDocumentTypePtr documentType = root->GetDocumentType(); // 外部サブセット ( external DTD subset ) のシステム識別子を取得する // id は "personal.dtd" になる SFXAnsiString id = documentType->GetSystemID(); // DTD に定義されているエンティティを DOMNamedNodeMap として取得する SFXXMLNode::DOMNamedNodeMapPtr entitymap = documentType->GetEntities(); // "name" エンティティの値を取得する // name は "sophia" になる SFXAnsiString name = SFXXMLEntityPtr(entitymap->GetNamedItem("name"))->GetValue(); }
SFXXMLDOMParser parser; // Comment ノードを作成するように設定する parser.SetCreateCommentNodes(true); // 名前空間を処理するように設定する parser.SetDoNamespaces(true); // スキーマ付き XML 文書を解析するため、文法タイプを設定する parser.SetGrammar(SFXXMLGrammar::GRAMMAR_SCHEMA); // スキーマを処理するように設定する parser.SetDoSchema(true); // XSD ファイルを設定する // ( デフォルト ディレクトリ: アプリのホーム ディレクトリ ) parser.SetSchemaLocation("schema.xsd"); // XML 文書をスキーマで検証するように設定する parser.SetValidationSchema(true); // "annotation" 要素が無効になるように設定する parser.SetIgnoreAnnotations(false); // DOM パーサーを使って スキーマ付き XML 文書を解析する error = parser.Parse(SFXPath("/file.xml"));
|
Copyright (C) 2002 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|