前端之家收集整理的这篇文章主要介绍了
Qt 中sax方式 解析 xml文件,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
- 1 bool CSFCfgFileBase::LoadConfigFile( const QString &strCfgFile )
- {
- if( strCfgFile != "" )
- {
- m_strConfigFileName = strCfgFile;
- }
-
- QFile file(m_strConfigFileName);
- if (!file.open(QFile::ReadOnly | QFile::Text))
- {
- return false;
- }
-
- file.seek( 0 );
-
- QXmlInputSource xmlInputSource(&file);
-
- QXmlSimpleReader reader;
- reader.setContentHandler(this);
- reader.setErrorHandler(this);
-
- bool bResult = reader.parse( xmlInputSource );
-
- file.close();
-
- if( bResult )
- {
- InitAllFeatures();
- m_bCfgLoaded = true;
- }
-
- return m_bCfgLoaded;
- }
-
- 2.
bool CSFCfgFileValueExchange::startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts)
{
if( m_eCurrentRoute == XRT_FEATURE && m_slParseRoute.size() == XRL_FEATURE )
{
if( qName == "ValueExchange" )
{
m_eCurrentRoute = XRT_FEATURE_VALUEEXCHANGE;
}
else
{
return CSFCfgFileClass::startElement( namespaceURI, localName, qName, atts );
}
}
else if( m_eCurrentRoute == XRT_FEATURE_VALUEEXCHANGE && m_slParseRoute.size() == XRL_FEATURE_VALUEEXCHANGE )
{
if( qName == "ITEM" )
{
CSFCfgParserValueExchange::DS_ValueExchangeItem dsItem;
CSFCfgParserValueExchange::LoadValueExchangeItem( atts, &dsItem );
GetCfgValueExchangesPtr()->push_back( dsItem );
}
else
{
}
}
else
{
return CSFCfgFileClass::startElement( namespaceURI, atts );
}
m_slParseRoute.append( qName );
return true;
}
3.bool CSFCfgFileValueExchange::endElement(const QString& namespaceURI, const QString& qName)
{
if( m_slParseRoute.size() == XRL_FEATURE_VALUEEXCHANGE && m_eCurrentRoute == XRT_FEATURE_VALUEEXCHANGE && qName == "ValueExchange" )
{
m_eCurrentRoute = XRT_FEATURE;
}
else
{
return CSFCfgFileClass::endElement( namespaceURI, qName );
}
m_slParseRoute.removeLast();
return true;
}