BIMHome v1.0.0
BIMHome接口文档说明
Reader.h
浏览该文件的文档.
1/************************************************************************
2* @file Reader.h
3*
4* @brief 读取文件相关类
5*
6* @details 读取文件相关类
7*
8* @author wukx
9*
10* @version v1.0
11*
12* @date 2016.9.29
13*
14* @license 北京华科软科技有限公司
15*
16*************************************************************************/
17
18#ifndef BIMHOMEBASE_READER_H
19#define BIMHOMEBASE_READER_H
20
21#include <bitset>
22#include <map>
23#include <memory>
24#include <sstream>
25#include <string>
26
27#include <xercesc/framework/XMLPScanToken.hpp>
28#include <xercesc/sax2/Attributes.hpp>
29#include <xercesc/sax2/DefaultHandler.hpp>
30
31
33
34
35namespace zipios
36{
37 class ZipInputStream;
38}
39
40XERCES_CPP_NAMESPACE_BEGIN
41class DefaultHandler;
42class SAX2XMLReader;
43XERCES_CPP_NAMESPACE_END
44
45namespace Base
46{
47 class Persistence;
48
116 class BaseExport XMLReader : public XERCES_CPP_NAMESPACE_QUALIFIER DefaultHandler
117 {
118 public:
128 {
129 PartialRestore = 0,
130 PartialRestoreInDocumentObject = 1,
131 PartialRestoreInProperty = 2,
132 PartialRestoreInObject = 3
133 };
134
148 enum
149 {
150 None = 0,
158 EndCDATA
159 }ReadType;
160
162 {
163 std::string FileName;
164 Base::Persistence* Object;
165 };
166
173 XMLReader(const char* FileName, std::istream&);
175
181 bool isValid() const { return _valid; }
182
188 bool isVerbose() const { return _verbose; }
189
195 void setVerbose(bool on) { _verbose = on; }
196
204 const char* localName() const;
205
211 int level() const;
212
218 void readElement(const char* ElementName = nullptr);
219
226 void readEndElement(const char* ElementName = nullptr, int level = -1);
227
234
240
246 void readBinFile(const char*);
248
256 unsigned int getAttributeCount() const;
257
264 bool hasAttribute(const char* AttrName) const;
265
272 long getAttributeAsInteger(const char* AttrName) const;
273
280 unsigned long getAttributeAsUnsigned(const char* AttrName) const;
281
288 double getAttributeAsFloat(const char* AttrName) const;
289
296 const char* getAttribute(const char* AttrName) const;
298
308 const char* addFile(const char* Name, Base::Persistence* Object);
309
315 void readFiles(zipios::ZipInputStream& zipstream) const;
316
323 void readFile(zipios::ZipInputStream& zipstream, std::string fileName) const;
329 const std::vector<std::string>& getFilenames() const;
336 bool isRegistered(Base::Persistence* Object) const;
343 virtual void addName(const char*, const char*);
350 virtual const char* getName(const char*) const;
356 virtual bool doNameMapping() const;
358
364 void setPartialRestore(bool on);
380
387 bool testStatus(ReaderStatus pos) const;
388
395 void setStatus(ReaderStatus pos, bool on);
401 FileInfo getFileInfo() { return _File; }
402
403
404 protected:
410 bool read();
411
412 // -----------------------------------------------------------------------
413 // SAX ContentHandler 接口
414 // -----------------------------------------------------------------------
421 virtual void startDocument();
426 virtual void endDocument();
435 virtual void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const XERCES_CPP_NAMESPACE_QUALIFIER Attributes& attrs);
443 virtual void endElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);
444
451#if (XERCES_VERSION_MAJOR == 2)
452 virtual void characters(const XMLCh* const chars, const unsigned int length);
453#else
454 virtual void characters(const XMLCh* const chars, const XMLSize_t length);
455#endif
456
463#if (XERCES_VERSION_MAJOR == 2)
464 virtual void ignorableWhitespace(const XMLCh* const chars, const unsigned int length);
465#else
466 virtual void ignorableWhitespace(const XMLCh* const chars, const XMLSize_t length);
467#endif
469
476 virtual void startCDATA();
481 virtual void endCDATA();
483
490 virtual void resetDocument();
492
500 void warning(const XERCES_CPP_NAMESPACE_QUALIFIER SAXParseException& exc);
506 void error(const XERCES_CPP_NAMESPACE_QUALIFIER SAXParseException& exc);
512 void fatalError(const XERCES_CPP_NAMESPACE_QUALIFIER SAXParseException& exc);
519
520 public:
522 std::string ProgramVersion;
524 std::vector<FileEntry> FileList;
525 protected:
526 int Level;
527 std::string LocalName;
528 std::string Characters;
529 unsigned int CharacterCount;
531 std::map<std::string, std::string> AttrMap;
532 typedef std::map<std::string, std::string> AttrMapType;
535 XERCES_CPP_NAMESPACE_QUALIFIER SAX2XMLReader* parser;
536 XERCES_CPP_NAMESPACE_QUALIFIER XMLPScanToken token;
537 bool _valid;
538 bool _verbose;
540 std::vector<std::string> FileNames;
541 std::map<std::string, std::string> nameMap;
542 std::bitset<32> StatusBits;
544 };
550 class BaseExport Reader : public std::istream
551 {
552 public:
560 Reader(std::istream& stream, const std::string& name, int version);
561
567 std::istream& getStream();
568
574 std::string getFileName() const;
575
581 int getFileVersion() const;
582
588 void initLocalReader(std::shared_ptr<Base::XMLReader> reader);
589
595 std::shared_ptr<Base::XMLReader> getLocalReader() const;
596
597 private:
598 std::istream& _str;
599 std::string _name;
601 std::shared_ptr<Base::XMLReader> localreader;
602 };
603
604
605}
606
607
608#endif //BIMHOMEBASE_READER_H
None
Normal text
Definition Setting.h:97
File name unification This class handles everything related to file names the file names are internal...
Definition FileInfo.h:38
std::istream & _str
绑定的输入流
Definition Reader.h:598
std::string getFileName() const
获取文件名
std::shared_ptr< Base::XMLReader > getLocalReader() const
获取本地 XMLReader 对象
int getFileVersion() const
获取文件版本
std::string _name
文件名
Definition Reader.h:599
Reader(std::istream &stream, const std::string &name, int version)
构造函数
int fileVersion
文件版本
Definition Reader.h:600
std::istream & getStream()
获取绑定的输入流
void initLocalReader(std::shared_ptr< Base::XMLReader > reader)
初始化本地 XMLReader 对象
std::shared_ptr< Base::XMLReader > localreader
本地 XMLReader 对象
Definition Reader.h:601
Reader 类,用于封装输入流并提供文件相关信息
Definition Reader.h:551
bool isRegistered(Base::Persistence *Object) const
检查对象是否已注册
@ StartCDATA
Definition Reader.h:157
@ EndDocument
Definition Reader.h:153
@ StartEndElement
Definition Reader.h:155
@ StartElement
Definition Reader.h:154
@ StartDocument
Definition Reader.h:152
@ EndElement
Definition Reader.h:156
@ Chars
Definition Reader.h:151
std::map< std::string, std::string > AttrMapType
属性映射表类型
Definition Reader.h:532
int level() const
获取当前元素的层级
unsigned long getAttributeAsUnsigned(const char *AttrName) const
获取指定属性的无符号整数值
void warning(const XERCES_CPP_NAMESPACE_QUALIFIER SAXParseException &exc)
处理警告
XERCES_CPP_NAMESPACE_QUALIFIER SAX2XMLReader * parser
XML 解析器
Definition Reader.h:535
const char * getAttribute(const char *AttrName) const
获取指定属性的字符串值
std::string Characters
当前读取的字符数据
Definition Reader.h:528
void clearPartialRestoreDocumentObject()
清除 DocumentObject 的部分恢复标志
bool testStatus(ReaderStatus pos) const
获取状态标志
virtual void endCDATA()
处理 CDATA 结束
virtual void resetDocument()
重置文档
const char * addFile(const char *Name, Base::Persistence *Object)
添加文件读取请求
unsigned int getAttributeCount() const
获取当前元素的属性数量
const std::vector< std::string > & getFilenames() const
获取所有注册的文件名
std::vector< FileEntry > FileList
文件条目列表
Definition Reader.h:524
double getAttributeAsFloat(const char *AttrName) const
获取指定属性的浮点值
bool _verbose
是否启用详细模式
Definition Reader.h:538
virtual void addName(const char *, const char *)
添加名称映射
virtual void startDocument()
处理文档开始
FileInfo _File
当前文件信息
Definition Reader.h:534
void readCharacters()
读取直到找到字符
bool hasAttribute(const char *AttrName) const
检查当前元素是否具有指定属性
bool readNextElement()
读取下一个元素
bool isValid() const
检查 XML 文件是否有效
Definition Reader.h:181
std::map< std::string, std::string > AttrMap
属性映射表
Definition Reader.h:531
virtual void ignorableWhitespace(const XMLCh *const chars, const XMLSize_t length)
处理可忽略的空白字符
std::string LocalName
当前元素的本地名称
Definition Reader.h:527
unsigned int CharacterCount
当前读取的字符数量
Definition Reader.h:529
int FileVersion
文件格式的版本
Definition Reader.h:523
std::string ProgramVersion
编写该文档的 BIMHome 版本
Definition Reader.h:522
virtual void endDocument()
处理文档结束
virtual const char * getName(const char *) const
获取名称映射
FileInfo getFileInfo()
获取文件信息
Definition Reader.h:401
int Level
当前解析的层级
Definition Reader.h:526
void setStatus(ReaderStatus pos, bool on)
设置状态标志
void clearPartialRestoreProperty()
清除属性的部分恢复标志
std::vector< std::string > FileNames
注册的文件名列表
Definition Reader.h:540
void setVerbose(bool on)
设置详细模式
Definition Reader.h:195
virtual bool doNameMapping() const
检查是否启用名称映射
const char * localName() const
获取当前元素的本地名称
ReaderStatus
枚举类型,定义了读取状态
Definition Reader.h:128
long getAttributeAsInteger(const char *AttrName) const
获取指定属性的整数值
XERCES_CPP_NAMESPACE_QUALIFIER XMLPScanToken token
XML 扫描令牌
Definition Reader.h:536
std::bitset< 32 > StatusBits
状态标志位
Definition Reader.h:542
void readElement(const char *ElementName=nullptr)
读取直到找到开始元素
XMLReader(const char *FileName, std::istream &)
构造函数,打开文件并读取第一个元素
bool isVerbose() const
检查是否启用详细模式
Definition Reader.h:188
int DocumentSchema
文档的 Schema 版本
Definition Reader.h:521
void readFiles(zipios::ZipInputStream &zipstream) const
处理请求的文件读取
void fatalError(const XERCES_CPP_NAMESPACE_QUALIFIER SAXParseException &exc)
处理致命错误
virtual void characters(const XMLCh *const chars, const XMLSize_t length)
处理字符数据
virtual void endElement(const XMLCh *const uri, const XMLCh *const localname, const XMLCh *const qname)
处理元素结束
void clearPartialRestoreObject()
清除对象的部分恢复标志
void error(const XERCES_CPP_NAMESPACE_QUALIFIER SAXParseException &exc)
处理错误
void readFile(zipios::ZipInputStream &zipstream, std::string fileName) const
从 ZIP 输入流中读取指定文件
virtual void startCDATA()
处理 CDATA 开始
std::map< std::string, std::string > nameMap
名称映射表
Definition Reader.h:541
bool _valid
文件是否有效
Definition Reader.h:537
void readEndElement(const char *ElementName=nullptr, int level=-1)
读取直到找到结束元素
void readBinFile(const char *)
读取二进制文件
bool read()
读取下一个元素
void resetErrors()
重置错误
void setPartialRestore(bool on)
设置全局和局部的部分恢复标志
virtual void startElement(const XMLCh *const uri, const XMLCh *const localname, const XMLCh *const qname, const XERCES_CPP_NAMESPACE_QUALIFIER Attributes &attrs)
处理元素开始
XML 读取器类 这是 BIMHome 中对象存储和检索系统的一个重要辅助类。 这些类主要继承自 App::Persistence 基类,并实现了 Restore() 方法。
Definition Reader.h:117
Definition BaseFigureFactory.h:24
Definition Reader.h:36
std::string FileName
Definition Reader.h:163
Base::Persistence * Object
Definition Reader.h:164
Definition Reader.h:162