SAX パーサーを使って XML 文書を解析する
SFXXMLSAXParser::Parse を使って、XML 文書を読み込み、解析します。
SFXXMLSAXParser クラスを使うには、 SFXXMLDefaultHandler クラスを継承するクラスを実装する必要があります。
XML文書を解析するサンプルコードSFXXMLSAXParser saxparser; MyXMLHandler handler; // イベントを通知するハンドラ インターフェースを設定する saxparser.SetDefaultHandler(&handler); // パーサーを開始する // アプリのホームフォルダにある file.xml を解析する saxparser.Parse("file.xml");ハンドラ クラスの定義( SFXXMLDefaultHandler クラスを継承するクラス )
class MyXMLHandler : public SFXXMLDefaultHandler { public: explicit MyXMLHandler(Void); virtual ~MyXMLHandler(Void); // 各ハンドラ virtual Void Characters(SFXAnsiStringConstRef string, BoolConst cdataSection = true); virtual Void EndDocument(Void); virtual Void EndElement(SFXAnsiStringConstRef uri =SFXAnsiString::EmptyInstance(), SFXAnsiStringConstRef localname = SFXAnsiString::EmptyInstance(), SFXAnsiStringConstRef qname = SFXAnsiString::EmptyInstance()); virtual Void StartDocument(Void); virtual Void StartElement(SFXAnsiStringConstRef uri, SFXAnsiStringConstRef localname, SFXAnsiStringConstRef qname, SFXXMLGrammar::XMLAttrListConstRef attrList); virtual Void IgnorableWhitespace(SFXAnsiStringConstRef string); virtual Void ProcessingInstruction(SFXAnsiStringConstRef target, SFXAnsiStringConstRef data); virtual Void EndPrefixMapping(SFXAnsiStringConstRef prefix); virtual Void StartPrefixMapping(SFXAnsiStringConstRef prefix, SFXAnsiStringConstRef uri); virtual Void Comment(SFXAnsiStringConstRef string); virtual Void EndCDATA(Void); virtual Void EndDTD(Void); virtual Void EndEntity(SFXAnsiStringConstRef name); virtual Void StartCDATA(Void); virtual Void StartDTD(SFXAnsiStringConstRef name, SFXAnsiStringConstRef publicId, SFXAnsiStringConstRef systemId); virtual Void StartEntity(SFXAnsiStringConstRef name); virtual Void NotationDecl(SFXAnsiStringConstRef name, SFXAnsiStringConstRef publicId, SFXAnsiStringConstRef systemId); virtual Void UnparsedEntityDecl(SFXAnsiStringConstRef name, SFXAnsiStringConstRef publicId, SFXAnsiStringConstRef systemId, SFXAnsiStringConstRef notationName); virtual Void ElementDecl(SFXAnsiStringConstRef name, SFXAnsiStringConstRef model); virtual Void AttributeDecl(SFXAnsiStringConstRef ename, SFXAnsiStringConstRef aname, SFXAnsiStringConstRef type, SFXAnsiStringConstRef valuedefault, SFXAnsiStringConstRef value); virtual Void InternalEntityDecl(SFXAnsiStringConstRef name, SFXAnsiStringConstRef value); virtual Void ExternalEntityDecl(SFXAnsiStringConstRef name, SFXAnsiStringConstRef publicId, SFXAnsiStringConstRef systemId); virtual Void ErrorReport(SFCErrorConst error, SFXAnsiStringConstRef errInfo); };ハンドラ クラスの実装( SFXXMLDefaultHandler クラスを継承するクラス )
// コンストラクタ
MyXMLHandler::MyXMLHandler(Void)
{
return;
}
// デストラクタ
MyXMLHandler::~MyXMLHandler(Void)
{
return;
}
// 文書の開始通知を受け取るハンドラ
Void MyXMLHandler::StartDocument(Void)
{
TRACE("document start");
}
// 文書の終了通知を受け取るハンドラ
Void MyXMLHandler::EndDocument(Void)
{
TRACE("document end");
}
// 要素の開始通知を受け取るハンドラ
Void MyXMLHandler::StartElement(SFXAnsiStringConstRef uri,
SFXAnsiStringConstRef localname, SFXAnsiStringConstRef qname,
SFXXMLGrammar::XMLAttrListConstRef attrList)
{
// 要素名を表示
TRACE("element: %s start", qname.GetCString());
}
// 要素の終了通知を受け取るハンドラ
Void MyXMLHandler::EndElement(SFXAnsiStringConstRef uri,
SFXAnsiStringConstRef localname, SFXAnsiStringConstRef qname)
{
TRACE("element: %s end", qname.GetCString());
}
// 文字データの通知を受け取るハンドラ
Void MyXMLHandler::Characters(SFXAnsiStringConstRef string,
BoolConst /*cdataSection*/)
{
TRACE("text: %s", string.GetCString());
return;
}
// ↓以下は空のハンドラ ( イベントを無視する場合も定義する )
Void MyXMLHandler::IgnorableWhitespace(SFXAnsiStringConstRef string)
{
return;
}
Void MyXMLHandler::ProcessingInstruction(SFXAnsiStringConstRef target,
SFXAnsiStringConstRef data)
{
return;
}
Void MyXMLHandler::EndPrefixMapping(SFXAnsiStringConstRef prefix)
{
return;
}
Void MyXMLHandler::StartPrefixMapping(SFXAnsiStringConstRef prefix,
SFXAnsiStringConstRef uri)
{
return;
}
Void MyXMLHandler::Comment(SFXAnsiStringConstRef string)
{
return;
}
Void MyXMLHandler::EndCDATA(Void)
{
return;
}
Void MyXMLHandler::EndDTD(Void)
{
return;
}
Void MyXMLHandler::EndEntity(SFXAnsiStringConstRef name)
{
return;
}
Void MyXMLHandler::StartCDATA(Void)
{
return;
}
Void MyXMLHandler::StartDTD(SFXAnsiStringConstRef name,
SFXAnsiStringConstRef publicId, SFXAnsiStringConstRef systemId)
{
return;
}
Void MyXMLHandler::StartEntity(SFXAnsiStringConstRef name)
{
return;
}
Void MyXMLHandler::NotationDecl(SFXAnsiStringConstRef name,
SFXAnsiStringConstRef publicId, SFXAnsiStringConstRef systemId)
{
return;
}
Void MyXMLHandler::UnparsedEntityDecl(SFXAnsiStringConstRef name,
SFXAnsiStringConstRef publicId, SFXAnsiStringConstRef systemId,
SFXAnsiStringConstRef notationName)
{
return;
}
Void MyXMLHandler::ElementDecl(SFXAnsiStringConstRef name,
SFXAnsiStringConstRef model)
{
return;
}
Void MyXMLHandler::AttributeDecl(SFXAnsiStringConstRef ename,
SFXAnsiStringConstRef aname, SFXAnsiStringConstRef type,
SFXAnsiStringConstRef mode, SFXAnsiStringConstRef value)
{
return;
}
Void MyXMLHandler::InternalEntityDecl(SFXAnsiStringConstRef name,
SFXAnsiStringConstRef value)
{
return;
}
Void MyXMLHandler::ExternalEntityDecl(SFXAnsiStringConstRef name,
SFXAnsiStringConstRef publicId, SFXAnsiStringConstRef systemId)
{
return;
}
Void MyXMLHandler::ErrorReport(SFCErrorConst error,
SFXAnsiStringConstRef errInfo)
{
TRACE("----- ErrorReport ------");
TRACE("error-%x", error);
TRACE("errInfo-%s", errInfo.GetCString());
}









