BIMHome v1.0.0
BIMHome接口文档说明
| Public 类型 | Public 成员函数 | Public 属性 | 所有成员列表
XMLReader类 参考

XML 读取器类 这是 BIMHome 中对象存储和检索系统的一个重要辅助类。 这些类主要继承自 App::Persistence 基类,并实现了 Restore() 方法。 更多...

#include <Reader.h>

类 XMLReader 继承关系图:

struct  FileEntry
 

Public 类型

enum  {
  None = 0 , Chars , StartDocument , EndDocument ,
  StartElement , StartEndElement , EndElement , StartCDATA ,
  EndCDATA
}
 枚举类型,定义了读取操作的类型 更多...
 
enum  ReaderStatus { PartialRestore = 0 , PartialRestoreInDocumentObject = 1 , PartialRestoreInProperty = 2 , PartialRestoreInObject = 3 }
 枚举类型,定义了读取状态 更多...
 

Public 成员函数

bool isValid () const
 检查 XML 文件是否有效
 
bool isVerbose () const
 检查是否启用详细模式
 
void setVerbose (bool on)
 设置详细模式
 
 XMLReader (const char *FileName, std::istream &)
 构造函数,打开文件并读取第一个元素
 
 ~XMLReader ()
 
解析器相关
const char * localName () const
 获取当前元素的本地名称
 
int level () const
 获取当前元素的层级
 
void readElement (const char *ElementName=nullptr)
 读取直到找到开始元素
 
void readEndElement (const char *ElementName=nullptr, int level=-1)
 读取直到找到结束元素
 
bool readNextElement ()
 读取下一个元素
 
void readCharacters ()
 读取直到找到字符
 
void readBinFile (const char *)
 读取二进制文件
 
属性相关
unsigned int getAttributeCount () const
 获取当前元素的属性数量
 
bool hasAttribute (const char *AttrName) const
 检查当前元素是否具有指定属性
 
long getAttributeAsInteger (const char *AttrName) const
 获取指定属性的整数值
 
unsigned long getAttributeAsUnsigned (const char *AttrName) const
 获取指定属性的无符号整数值
 
double getAttributeAsFloat (const char *AttrName) const
 获取指定属性的浮点值
 
const char * getAttribute (const char *AttrName) const
 获取指定属性的字符串值
 

Public 属性

enum Base::XMLReader:: { ... }  ReadType
 枚举类型,定义了读取操作的类型
 

Protected 成员函数

Content handler
virtual void startDocument ()
 处理文档开始
 
virtual void endDocument ()
 处理文档结束
 
virtual void startElement (const XMLCh *const uri, const XMLCh *const localname, const XMLCh *const qname, const XERCES_CPP_NAMESPACE_QUALIFIER Attributes &attrs)
 处理元素开始
 
virtual void endElement (const XMLCh *const uri, const XMLCh *const localname, const XMLCh *const qname)
 处理元素结束
 
virtual void characters (const XMLCh *const chars, const XMLSize_t length)
 处理字符数据
 
virtual void ignorableWhitespace (const XMLCh *const chars, const XMLSize_t length)
 处理可忽略的空白字符
 
Lexical相关
virtual void startCDATA ()
 处理 CDATA 开始
 
virtual void endCDATA ()
 处理 CDATA 结束
 
文档相关
virtual void resetDocument ()
 重置文档
 

错误处理相关

typedef std::map< std::string, std::string > AttrMapType
 属性映射表类型
 
int DocumentSchema
 文档的 Schema 版本
 
std::string ProgramVersion
 编写该文档的 BIMHome 版本
 
int FileVersion
 文件格式的版本
 
std::vector< FileEntryFileList
 文件条目列表
 
int Level
 当前解析的层级
 
std::string LocalName
 当前元素的本地名称
 
std::string Characters
 当前读取的字符数据
 
unsigned int CharacterCount
 当前读取的字符数量
 
std::map< std::string, std::string > AttrMap
 属性映射表
 
FileInfo _File
 当前文件信息
 
XERCES_CPP_NAMESPACE_QUALIFIER SAX2XMLReader * parser
 XML 解析器
 
XERCES_CPP_NAMESPACE_QUALIFIER XMLPScanToken token
 XML 扫描令牌
 
bool _valid
 文件是否有效
 
bool _verbose
 是否启用详细模式
 
std::vector< std::string > FileNames
 注册的文件名列表
 
std::map< std::string, std::string > nameMap
 名称映射表
 
std::bitset< 32 > StatusBits
 状态标志位
 
void warning (const XERCES_CPP_NAMESPACE_QUALIFIER SAXParseException &exc)
 处理警告
 
void error (const XERCES_CPP_NAMESPACE_QUALIFIER SAXParseException &exc)
 处理错误
 
void fatalError (const XERCES_CPP_NAMESPACE_QUALIFIER SAXParseException &exc)
 处理致命错误
 
void resetErrors ()
 重置错误
 

additional file reading

const char * addFile (const char *Name, Base::Persistence *Object)
 添加文件读取请求
 
void readFiles (zipios::ZipInputStream &zipstream) const
 处理请求的文件读取
 
void readFile (zipios::ZipInputStream &zipstream, std::string fileName) const
 从 ZIP 输入流中读取指定文件
 
const std::vector< std::string > & getFilenames () const
 获取所有注册的文件名
 
bool isRegistered (Base::Persistence *Object) const
 检查对象是否已注册
 
virtual void addName (const char *, const char *)
 添加名称映射
 
virtual const char * getName (const char *) const
 获取名称映射
 
virtual bool doNameMapping () const
 检查是否启用名称映射
 
void setPartialRestore (bool on)
 设置全局和局部的部分恢复标志
 
void clearPartialRestoreDocumentObject ()
 清除 DocumentObject 的部分恢复标志
 
void clearPartialRestoreProperty ()
 清除属性的部分恢复标志
 
void clearPartialRestoreObject ()
 清除对象的部分恢复标志
 
bool testStatus (ReaderStatus pos) const
 获取状态标志
 
void setStatus (ReaderStatus pos, bool on)
 设置状态标志
 
FileInfo getFileInfo ()
 获取文件信息
 
bool read ()
 读取下一个元素
 

详细描述

XML 读取器类 这是 BIMHome 中对象存储和检索系统的一个重要辅助类。 这些类主要继承自 App::Persistence 基类,并实现了 Restore() 方法。

读取器主要由 App::Document 在从文件中检索文档时初始化。从那里开始,将依次调用所有存储对象的 Restore() 方法。
一个简单的例子是 App::PropertyString 的恢复:
void PropertyString::Save (short indent,std::ostream &str)
{
str << "<String value=\"" << _cValue.c_str() <<"\"/>" ;
}
void PropertyString::Restore(Base::Reader &reader)
{
// 读取我的元素
reader.readElement("String");
// 获取我的属性值
_cValue = reader.getAttribute("value");
}
Reader 类,用于封装输入流并提供文件相关信息
Definition Reader.h:551
一个更复杂的例子是 App::PropertyContainer 的恢复:
void PropertyContainer::Save (short indent,std::ostream &str)
{
std::map<std::string,Property*> Map;
getPropertyMap(Map);
str << ind(indent) << "<Properties Count=\"" << Map.size() << "\">" << endl;
std::map<std::string,Property*>::iterator it;
for(it = Map.begin(); it != Map.end(); ++it)
{
str << ind(indent+1) << "<Property name=\"" << it->first << "\" type=\"" << it->second->getTypeId().getName() << "\">" ;
it->second->Save(indent+2,str);
str << "</Property>" << endl;
}
str << ind(indent) << "</Properties>" << endl;
}
void PropertyContainer::Restore(Base::Reader &reader)
{
reader.readElement("Properties");
int Cnt = reader.getAttributeAsInteger("Count");
for(int i=0 ;i<Cnt ;i++)
{
reader.readElement("Property");
string PropName = reader.getAttribute("name");
Property* prop = getPropertyByName(PropName.c_str());
if(prop)
prop->Restore(reader);
reader.readEndElement("Property");
}
reader.readEndElement("Properties");
}
参见
Base::Persistence
作者
Juergen Riegel

XMLReader 类,用于解析 XML 文件

该类继承自 DefaultHandler,实现了 XML 文件的读取和解析功能。 它提供了多种方法用于处理 XML 元素、属性以及文件操作。此外,它还支持部分恢复功能,用于处理不完整的 XML 数据。


该类的文档由以下文件生成: