本文整理汇总了C++中TiXmlDocument类的典型用法代码示例。如果您正苦于以下问题:C++ TiXmlDocument类的具体用法?C++ TiXmlDocument怎么用?C++ TiXmlDocument使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TiXmlDocument类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SkipWhiteSpace
const char* TiXmlElement::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )
{
p = SkipWhiteSpace( p, encoding );
TiXmlDocument* document = GetDocument();
if ( !p || !*p )
{
if ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT, 0, 0, encoding );
return 0;
}
if ( data )
{
data->Stamp( p, encoding );
location = data->Cursor();
}
if ( *p != '<' )
{
if ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT, p, data, encoding );
return 0;
}
p = SkipWhiteSpace( p+1, encoding );
// Read the name.
const char* pErr = p;
p = ReadName( p, &value, encoding );
if ( !p || !*p )
{
if ( document ) document->SetError( TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, pErr, data, encoding );
return 0;
}
TIXML_STRING endTag ("</");
endTag += value;
endTag += ">";
// Check for and read attributes. Also look for an empty
// tag or an end tag.
while ( p && *p )
{
pErr = p;
p = SkipWhiteSpace( p, encoding );
if ( !p || !*p )
{
if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding );
return 0;
}
if ( *p == '/' )
{
++p;
// Empty tag.
if ( *p != '>' )
{
if ( document ) document->SetError( TIXML_ERROR_PARSING_EMPTY, p, data, encoding );
return 0;
}
return (p+1);
}
else if ( *p == '>' )
{
// Done with attributes (if there were any.)
// Read the value -- which can include other
// elements -- read the end tag, and return.
++p;
p = ReadValue( p, data, encoding ); // Note this is an Element method, and will set the error if one happens.
if ( !p || !*p )
return 0;
// We should find the end tag now
if ( StringEqual( p, endTag.c_str(), false, encoding ) )
{
p += endTag.length();
return p;
}
else
{
if ( document ) document->SetError( TIXML_ERROR_READING_END_TAG, p, data, encoding );
return 0;
}
}
else
{
// Try to read an attribute:
TiXmlAttribute* attrib = new TiXmlAttribute();
if ( !attrib )
{
if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, pErr, data, encoding );
return 0;
}
attrib->SetDocument( document );
const char* pErr = p;
p = attrib->Parse( p, data, encoding );
if ( !p || !*p )
{
if ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT, pErr, data, encoding );
//.........这里部分代码省略.........
示例2: while
void TiXmlElement::StreamIn (TIXML_ISTREAM * in, TIXML_STRING * tag)
{
// We're called with some amount of pre-parsing. That is, some of "this"
// element is in "tag". Go ahead and stream to the closing ">"
while( in->good() )
{
int c = in->get();
if ( c <= 0 )
{
TiXmlDocument* document = GetDocument();
if ( document )
document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
return;
}
(*tag) += (char) c ;
if ( c == '>' )
break;
}
if ( tag->length() < 3 ) return;
// Okay...if we are a "/>" tag, then we're done. We've read a complete tag.
// If not, identify and stream.
if ( tag->at( tag->length() - 1 ) == '>'
&& tag->at( tag->length() - 2 ) == '/' )
{
// All good!
return;
}
else if ( tag->at( tag->length() - 1 ) == '>' )
{
// There is more. Could be:
// text
// closing tag
// another node.
for ( ;; )
{
StreamWhiteSpace( in, tag );
// Do we have text?
if ( in->good() && in->peek() != '<' )
{
// Yep, text.
TiXmlText text( "" );
text.StreamIn( in, tag );
// What follows text is a closing tag or another node.
// Go around again and figure it out.
continue;
}
// We now have either a closing tag...or another node.
// We should be at a "<", regardless.
if ( !in->good() ) return;
assert( in->peek() == '<' );
int tagIndex = tag->length();
bool closingTag = false;
bool firstCharFound = false;
for( ;; )
{
if ( !in->good() )
return;
int c = in->peek();
if ( c <= 0 )
{
TiXmlDocument* document = GetDocument();
if ( document )
document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN );
return;
}
if ( c == '>' )
break;
*tag += (char) c;
in->get();
if ( !firstCharFound && c != '<' && !IsWhiteSpace( c ) )
{
firstCharFound = true;
if ( c == '/' )
closingTag = true;
}
}
// If it was a closing tag, then read in the closing '>' to clean up the input stream.
// If it was not, the streaming will be done by the tag.
if ( closingTag )
{
if ( !in->good() )
return;
int c = in->get();
if ( c <= 0 )
{
TiXmlDocument* document = GetDocument();
//.........这里部分代码省略.........
示例3: ParseText
void Map::ParseText(const string &text)
{
// Create a tiny xml document and use it to parse the text.
TiXmlDocument doc;
doc.Parse(text.c_str());
// Check for parsing errors.
if (doc.Error())
{
has_error = true;
error_code = TMX_PARSING_ERROR;
error_text = doc.ErrorDesc();
return;
}
TiXmlNode *mapNode = doc.FirstChild("map");
TiXmlElement* mapElem = mapNode->ToElement();
// Read the map attributes.
mapElem->Attribute("version", &version);
mapElem->Attribute("width", &width);
mapElem->Attribute("height", &height);
mapElem->Attribute("tilewidth", &tile_width);
mapElem->Attribute("tileheight", &tile_height);
// Read the orientation
std::string orientationStr = mapElem->Attribute("orientation");
if (!orientationStr.compare("orthogonal"))
{
orientation = TMX_MO_ORTHOGONAL;
}
else if (!orientationStr.compare("isometric"))
{
orientation = TMX_MO_ISOMETRIC;
}
else if (!orientationStr.compare("staggered"))
{
orientation = TMX_MO_STAGGERED;
}
const TiXmlNode *node = mapElem->FirstChild();
int zOrder = 0;
while( node )
{
// Read the map properties.
if( strcmp( node->Value(), "properties" ) == 0 )
{
properties.Parse(node);
}
// Iterate through all of the tileset elements.
if( strcmp( node->Value(), "tileset" ) == 0 )
{
// Allocate a new tileset and parse it.
Tileset *tileset = new Tileset();
tileset->Parse(node->ToElement());
// Add the tileset to the list.
tilesets.push_back(tileset);
}
// Iterate through all of the layer elements.
if( strcmp( node->Value(), "layer" ) == 0 )
{
// Allocate a new layer and parse it.
Layer *layer = new Layer(this);
layer->Parse(node);
layer->SetZOrder( zOrder );
++zOrder;
// Add the layer to the list.
layers.push_back(layer);
}
// Iterate through all of the imagen layer elements.
if( strcmp( node->Value(), "imagelayer" ) == 0 )
{
// Allocate a new layer and parse it.
ImageLayer *imageLayer = new ImageLayer(this);
imageLayer->Parse(node);
imageLayer->SetZOrder( zOrder );
++zOrder;
// Add the layer to the list.
image_layers.push_back(imageLayer);
}
// Iterate through all of the objectgroup elements.
if( strcmp( node->Value(), "objectgroup" ) == 0 )
{
// Allocate a new object group and parse it.
ObjectGroup *objectGroup = new ObjectGroup();
objectGroup->Parse(node);
objectGroup->SetZOrder( zOrder );
++zOrder;
// Add the object group to the list.
object_groups.push_back(objectGroup);
//.........这里部分代码省略.........
示例4: GetDocument
const char* TiXmlElement::ReadValue( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding )
{
TiXmlDocument* document = GetDocument();
const char* pWithWhiteSpace = p;
// Read in text and elements in any order.
p = SkipWhiteSpace( p, encoding );
while ( p && *p )
{
if ( *p != '<' )
{
// Take what we have, make a text element.
TiXmlText* textNode = new TiXmlText( "" );
if ( !textNode )
{
if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, encoding );
return 0;
}
if ( TiXmlBase::IsWhiteSpaceCondensed() )
{
p = textNode->Parse( p, data, encoding );
}
else
{
// Special case: we want to keep the white space
// so that leading spaces aren't removed.
p = textNode->Parse( pWithWhiteSpace, data, encoding );
}
if ( !textNode->Blank() )
LinkEndChild( textNode );
else
delete textNode;
}
else
{
// We hit a '<'
// Have we hit a new element or an end tag?
if ( StringEqual( p, "</", false, encoding ) )
{
return p;
}
else
{
TiXmlNode* node = Identify( p, encoding );
if ( node )
{
p = node->Parse( p, data, encoding );
LinkEndChild( node );
}
else
{
return 0;
}
}
}
p = SkipWhiteSpace( p, encoding );
}
if ( !p )
{
if ( document ) document->SetError( TIXML_ERROR_READING_ELEMENT_VALUE, 0, 0, encoding );
}
return p;
}
示例5: SkipWhiteSpace
TiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding )
{
TiXmlNode* returnNode = 0;
p = SkipWhiteSpace( p, encoding );
if( !p || !*p || *p != '<' )
{
return 0;
}
TiXmlDocument* doc = GetDocument();
p = SkipWhiteSpace( p, encoding );
if ( !p || !*p )
{
return 0;
}
// What is this thing?
// - Elements start with a letter or underscore, but xml is reserved.
// - Comments: <!--
// - Decleration: <?xml
// - Everthing else is unknown to tinyxml.
//
const char* xmlHeader = { "<?xml" };
const char* commentHeader = { "<!--" };
const char* dtdHeader = { "<!" };
if ( StringEqual( p, xmlHeader, true, encoding ) )
{
#ifdef DEBUG_PARSER
TIXML_LOG( "XML parsing Declaration\n" );
#endif
returnNode = new TiXmlDeclaration();
}
else if ( StringEqual( p, commentHeader, false, encoding ) )
{
#ifdef DEBUG_PARSER
TIXML_LOG( "XML parsing Comment\n" );
#endif
returnNode = new TiXmlComment();
}
else if ( StringEqual( p, dtdHeader, false, encoding ) )
{
#ifdef DEBUG_PARSER
TIXML_LOG( "XML parsing Unknown(1)\n" );
#endif
returnNode = new TiXmlUnknown();
}
else if ( IsAlpha( *(p+1), encoding )
|| *(p+1) == '_' )
{
#ifdef DEBUG_PARSER
TIXML_LOG( "XML parsing Element\n" );
#endif
returnNode = new TiXmlElement( "" );
}
else
{
#ifdef DEBUG_PARSER
TIXML_LOG( "XML parsing Unknown(2)\n" );
#endif
returnNode = new TiXmlUnknown();
}
if ( returnNode )
{
// Set the parent, so it can report errors
returnNode->parent = this;
}
else
{
if ( doc )
doc->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN );
}
return returnNode;
}
示例6: PathFindFileName
//.........这里部分代码省略.........
// Assign a buffer for the lexer name.
char lexName[MAX_EXTERNAL_LEXER_NAME_LEN];
lexName[0] = '\0';
TCHAR lexDesc[MAX_EXTERNAL_LEXER_DESC_LEN];
lexDesc[0] = '\0';
int numLexers = GetLexerCount();
NppParameters * nppParams = NppParameters::getInstance();
ExternalLangContainer *containers[30];
WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance();
for (int x = 0; x < numLexers; ++x)
{
GetLexerName(x, lexName, MAX_EXTERNAL_LEXER_NAME_LEN);
GetLexerStatusText(x, lexDesc, MAX_EXTERNAL_LEXER_DESC_LEN);
const TCHAR *pLexerName = wmc->char2wchar(lexName, CP_ACP);
if (!nppParams->isExistingExternalLangName(pLexerName) && nppParams->ExternalLangHasRoom())
containers[x] = new ExternalLangContainer(pLexerName, lexDesc);
else
containers[x] = NULL;
}
TCHAR xmlPath[MAX_PATH];
lstrcpy(xmlPath, nppParams->getNppPath().c_str());
PathAppend(xmlPath, TEXT("plugins\\Config"));
PathAppend(xmlPath, pi->_moduleName.c_str());
PathRemoveExtension(xmlPath);
PathAddExtension(xmlPath, TEXT(".xml"));
if (!PathFileExists(xmlPath))
{
lstrcpyn(xmlPath, TEXT("\0"), MAX_PATH );
lstrcpy(xmlPath, nppParams->getAppDataNppDir() );
PathAppend(xmlPath, TEXT("plugins\\Config"));
PathAppend(xmlPath, pi->_moduleName.c_str());
PathRemoveExtension( xmlPath );
PathAddExtension( xmlPath, TEXT(".xml") );
if (! PathFileExists( xmlPath ) )
{
throw generic_string(generic_string(xmlPath) + TEXT(" is missing."));
}
}
TiXmlDocument *pXmlDoc = new TiXmlDocument(xmlPath);
if (!pXmlDoc->LoadFile())
{
delete pXmlDoc;
pXmlDoc = NULL;
throw generic_string(generic_string(xmlPath) + TEXT(" failed to load."));
}
for (int x = 0; x < numLexers; ++x) // postpone adding in case the xml is missing/corrupt
{
if (containers[x] != NULL)
nppParams->addExternalLangToEnd(containers[x]);
}
nppParams->getExternalLexerFromXmlTree(pXmlDoc);
nppParams->getExternalLexerDoc()->push_back(pXmlDoc);
const char *pDllName = wmc->wchar2char(pluginFilePath, CP_ACP);
::SendMessage(_nppData._scintillaMainHandle, SCI_LOADLEXERLIBRARY, 0, (LPARAM)pDllName);
}
addInLoadedDlls(pluginFileName);
_pluginInfos.push_back(pi);
return (_pluginInfos.size() - 1);
}
catch (std::exception e)
{
::MessageBoxA(NULL, e.what(), "Exception", MB_OK);
return -1;
}
catch (generic_string s)
{
s += TEXT("\n\n");
s += USERMSG;
if (::MessageBox(NULL, s.c_str(), pluginFilePath, MB_YESNO) == IDYES)
{
dll2Remove.push_back(pluginFilePath);
}
delete pi;
return -1;
}
catch (...)
{
generic_string msg = TEXT("Failed to load");
msg += TEXT("\n\n");
msg += USERMSG;
if (::MessageBox(NULL, msg.c_str(), pluginFilePath, MB_YESNO) == IDYES)
{
dll2Remove.push_back(pluginFilePath);
}
delete pi;
return -1;
}
}
示例7: main
int main()
{
//
// We start with the 'demoStart' todo list. Process it. And
// should hopefully end up with the todo list as illustrated.
//
const char* demoStart =
"<?xml version=\"1.0\" standalone='no' >\n"
"<!-- Our to do list data -->"
"<ToDo>\n"
"<!-- Do I need a secure PDA? -->\n"
"<Item priority=\"1\" distance='close'> Go to the <bold>Toy store!</bold></Item>"
"<Item priority=\"2\" distance='none'> Do bills </Item>"
"<Item priority=\"2\" distance='far & back'> Look for Evil Dinosaurs! </Item>"
"</ToDo>";
{
#ifdef TIXML_USE_STL
/* What the todo list should look like after processing.
In stream (no formatting) representation. */
const char* demoEnd =
"<?xml version=\"1.0\" standalone=\"no\" ?>"
"<!-- Our to do list data -->"
"<ToDo>"
"<!-- Do I need a secure PDA? -->"
"<Item priority=\"2\" distance=\"close\">Go to the"
"<bold>Toy store!"
"</bold>"
"</Item>"
"<Item priority=\"1\" distance=\"far\">Talk to:"
"<Meeting where=\"School\">"
"<Attendee name=\"Marple\" position=\"teacher\" />"
"<Attendee name=\"Voel\" position=\"counselor\" />"
"</Meeting>"
"<Meeting where=\"Lunch\" />"
"</Item>"
"<Item priority=\"2\" distance=\"here\">Do bills"
"</Item>"
"</ToDo>";
#endif
// The example parses from the character string (above):
#if defined( WIN32 ) && defined( TUNE )
_CrtMemCheckpoint( &startMemState );
#endif
{
// Write to a file and read it back, to check file I/O.
TiXmlDocument doc( "demotest.xml" );
doc.Parse( demoStart );
if ( doc.Error() )
{
printf( "Error in %s: %s\n", doc.Value(), doc.ErrorDesc() );
exit( 1 );
}
doc.SaveFile();
}
TiXmlDocument doc( "demotest.xml" );
bool loadOkay = doc.LoadFile();
if ( !loadOkay )
{
printf( "Could not load test file 'demotest.xml'. Error='%s'. Exiting.\n", doc.ErrorDesc() );
exit( 1 );
}
printf( "** Demo doc read from disk: ** \n\n" );
printf( "** Printing via doc.Print **\n" );
doc.Print( stdout );
{
printf( "** Printing via TiXmlPrinter **\n" );
TiXmlPrinter printer;
doc.Accept( &printer );
fprintf( stdout, "%s", printer.CStr() );
}
#ifdef TIXML_USE_STL
{
printf( "** Printing via operator<< **\n" );
std::cout << doc;
}
#endif
TiXmlNode* node = 0;
TiXmlElement* todoElement = 0;
TiXmlElement* itemElement = 0;
// --------------------------------------------------------
// An example of changing existing attributes, and removing
// an element from the document.
// --------------------------------------------------------
// Get the "ToDo" element.
// It is a child of the document, and can be selected by name.
node = doc.FirstChild( "ToDo" );
assert( node );
//.........这里部分代码省略.........
示例8: FindAlbuminfo
void CMusicInfoScraper::FindAlbuminfo()
{
CStdString strAlbum=m_strAlbum;
CStdString strHTML;
m_vecAlbums.erase(m_vecAlbums.begin(), m_vecAlbums.end());
CScraperParser parser;
if (!parser.Load(_P("q:\\system\\scrapers\\music\\"+m_info.strPath)))
return;
if (!m_info.settings.GetPluginRoot() || m_info.settings.GetSettings().IsEmpty())
{
m_info.settings.LoadSettingsXML(_P("q:\\system\\scrapers\\music\\"+m_info.strPath));
m_info.settings.SaveFromDefault();
}
parser.m_param[0] = strAlbum;
parser.m_param[1] = m_strArtist;
CUtil::URLEncode(parser.m_param[0]);
CUtil::URLEncode(parser.m_param[1]);
CScraperUrl scrURL;
scrURL.ParseString(parser.Parse("CreateAlbumSearchUrl"));
if (!CScraperUrl::Get(scrURL.m_url[0], strHTML, m_http) || strHTML.size() == 0)
{
CLog::Log(LOGERROR, "%s: Unable to retrieve web site",__FUNCTION__);
return;
}
parser.m_param[0] = strHTML;
CStdString strXML = parser.Parse("GetAlbumSearchResults",&m_info.settings);
if (strXML.IsEmpty())
{
CLog::Log(LOGERROR, "%s: Unable to parse web site",__FUNCTION__);
return;
}
if (strXML.Find("encoding=\"utf-8\"") < 0)
g_charsetConverter.stringCharsetToUtf8(strXML);
// ok, now parse the xml file
TiXmlDocument doc;
doc.Parse(strXML.c_str(),0,TIXML_ENCODING_UTF8);
if (!doc.RootElement())
{
CLog::Log(LOGERROR, "%s: Unable to parse xml",__FUNCTION__);
return;
}
TiXmlHandle docHandle( &doc );
TiXmlElement* album = docHandle.FirstChild( "results" ).FirstChild( "entity" ).Element();
if (!album)
return;
while (album)
{
TiXmlNode* title = album->FirstChild("title");
TiXmlElement* link = album->FirstChildElement("url");
TiXmlNode* artist = album->FirstChild("artist");
TiXmlNode* year = album->FirstChild("year");
if (title && title->FirstChild())
{
CStdString strTitle = title->FirstChild()->Value();
CStdString strArtist;
CStdString strAlbumName;
if (artist && artist->FirstChild())
{
strArtist = artist->FirstChild()->Value();
strAlbumName.Format("%s - %s",strArtist.c_str(),strTitle.c_str());
}
else
strAlbumName = strTitle;
if (year && year->FirstChild())
strAlbumName.Format("%s (%s)",strAlbumName.c_str(),year->FirstChild()->Value());
CScraperUrl url;
if (!link)
url.ParseString(scrURL.m_xml);
while (link && link->FirstChild())
{
url.ParseElement(link);
link = link->NextSiblingElement("url");
}
CMusicAlbumInfo newAlbum(strTitle, strArtist, strAlbumName, url);
m_vecAlbums.push_back(newAlbum);
}
album = album->NextSiblingElement();
}
if (m_vecAlbums.size()>0)
m_bSuccessfull=true;
return;
}
示例9: write_SettingsXML
void CSettingsManager::write_SettingsXML()
{
try
{
if(m_Settings.size() > 0)
{
TiXmlDocument doc;
// ToDo: check all TiXml* generations!
TiXmlDeclaration *declaration = new TiXmlDeclaration("1.0", "", "");
doc.LinkEndChild(declaration);
TiXmlComment *autoGenComment = new TiXmlComment();
autoGenComment->SetValue(" THIS IS A AUTO GENERTATED FILE. DO NOT EDIT! ");
doc.LinkEndChild(autoGenComment);
for(SettingsMap::iterator mapIter = m_Settings.begin(); mapIter != m_Settings.end(); mapIter++)
{
vector<string> tokens;
strTokenizer(mapIter->first, SETTINGS_SEPERATOR_STR, tokens);
if(tokens.size() != 3)
{
doc.Clear();
KODI->Log(LOG_ERROR, "Line: %i func: %s, Saving XML-File failed! Wrong SettingsMap string! Please call contact Addon author!\n", __LINE__, __func__, m_XMLFilename.c_str());
return;
}
TiXmlElement *mainCategory = NULL;
// check if this main category is already available
for(TiXmlNode *element = doc.FirstChild(); element && !mainCategory; element = element->NextSiblingElement())
{
if(element->Value() == tokens[0])
{
mainCategory = static_cast<TiXmlElement*>(element);
}
}
if(!mainCategory)
{ // create new main category
mainCategory = new TiXmlElement(tokens[0]);
doc.LinkEndChild(mainCategory);
}
TiXmlElement *settingsGroup = new TiXmlElement("settings_group");
settingsGroup->SetAttribute("sub_category", tokens[1].c_str());
settingsGroup->SetAttribute("group_name", tokens[2].c_str());
mainCategory->LinkEndChild(settingsGroup);
for(CSettingsList::iterator setIter=mapIter->second.begin(); setIter != mapIter->second.end(); setIter++)
{
if(!*setIter)
{
KODI->Log(LOG_ERROR, "Line: %i func: %s, invalid settings element! Please call contact Addon author!\n", __LINE__, __func__);
return;
}
TiXmlElement *setting = new TiXmlElement("setting");
setting->SetAttribute("key", (*setIter)->get_Key().c_str());
switch((*setIter)->get_Type())
{
case ISettingsElement::STRING_SETTING:
setting->SetAttribute("string", STRING_SETTINGS(*setIter)->get_Setting().c_str());
break;
case ISettingsElement::UNSIGNED_INT_SETTING:
setting->SetAttribute("unsigned_int", toString(UNSIGNED_INT_SETTINGS(*setIter)->get_Setting()).c_str());
break;
case ISettingsElement::INT_SETTING:
setting->SetAttribute("int", INT_SETTINGS(*setIter)->get_Setting());
break;
case ISettingsElement::FLOAT_SETTING:
setting->SetDoubleAttribute("float", (double)FLOAT_SETTINGS(*setIter)->get_Setting());
break;
case ISettingsElement::DOUBLE_SETTING:
setting->SetDoubleAttribute("double", DOUBLE_SETTINGS(*setIter)->get_Setting());
break;
case ISettingsElement::BOOL_SETTING:
if(BOOL_SETTINGS(*setIter)->get_Setting())
{
setting->SetAttribute("bool", "true");
}
else
{
setting->SetAttribute("bool", "false");
}
break;
default:
KODI->Log(LOG_ERROR, "Line: %i func: %s, invalid settings type! Please call contact Addon author!\n", __LINE__, __func__);
return;
break;
}
settingsGroup->LinkEndChild(setting);
}
}
if(!doc.SaveFile(m_XMLFilename.c_str()))
//.........这里部分代码省略.........
示例10: exit
void Mapa::leerMapa(){
//cargo la textura del fondo
if(!fond.loadFromFile("resources/background.jpg")){
std::cerr << "Error cargando la imagen background.png";
exit(0);
}
fondo.setTexture(fond);
//creo el objeto xml
TiXmlDocument doc;
doc.LoadFile("resources/mapaMario.tmx");
TiXmlElement* map = doc.FirstChildElement("map");
//leo sus atributos
map->QueryIntAttribute("width",&_width);
map->QueryIntAttribute("height",&_height);
map->QueryIntAttribute("tilewidth",&_tileWidth);
map->QueryIntAttribute("tileheight",&_tileHeigth);
//Leemos las diferentes imagenes que nos sirven para hacer el rect de las texturas
TiXmlElement *img = map->FirstChildElement("tileset");
int numTil=0;
while(img){
numTil++;
img=img->NextSiblingElement("tileset");
}
string filename;
img = map->FirstChildElement("tileset");
//guardamos en filename el spritesheet
while(img){
filename=(string)img->FirstChildElement("image")->Attribute("source");
img=img->NextSiblingElement("tileset");
}
//leemos las diferentes capas
_tilesetTexture.loadFromFile(filename);
TiXmlElement *layer = map->FirstChildElement("layer");
while(layer){
_numLayers++;
layer= layer->NextSiblingElement("layer");
}
//Reserva de memoria para saber el numnero de capas y el tamaño
_tilemap=new int**[_numLayers];
for(int i=0; i<_numLayers; i++){
_tilemap[i]=new int*[_height];
}
for(int l=0; l<_numLayers; l++){
for(int y=0; y<_height; y++){
_tilemap[l][y]=new int[_width];
}
}
TiXmlElement *data;
//leemos el atributo imagen
layer = map->FirstChildElement("layer");
string *name=new string[_numLayers];
int j=0;
int l=0;
//leo los tiles del xml y avanzo a la siguiente posicion
while(layer){
data= layer->FirstChildElement("data")->FirstChildElement("tile");
name[j]= (string)layer->Attribute("name");
while(data){
for(int y=0; y<_height; y++){
for(int x=0; x<_width;x++){
data->QueryIntAttribute("gid",&_tilemap[l][y][x]);
data=data->NextSiblingElement("tile");
}
}
}
l++;
layer= layer->NextSiblingElement("layer");
j++;
}
//Reserva de memoria para los sprites
_tilemapSprite=new sf::Sprite***[_numLayers];
for(int l=0; l<_numLayers; l++){
_tilemapSprite[l]=new sf::Sprite**[_height];
}
for(int l=0; l<_numLayers; l++){
for(int y=0; y<_height; y++){
_tilemapSprite[l][y]= new sf::Sprite*[_width];
for(int x=0; x<_width; x++){
_tilemapSprite[l][y][x]=new sf::Sprite();
}
}
}
sf::Texture aux;
//falta el corte
//.........这里部分代码省略.........
示例11: read_SettingsXML
void CSettingsManager::read_SettingsXML()
{
TiXmlDocument xmlDoc;
if(!xmlDoc.LoadFile(m_XMLFilename))
{
KODI->Log(LOG_NOTICE, "No initial settings XML file found.");
return;
}
TiXmlElement *pRootElement = xmlDoc.RootElement();
if(!pRootElement)
{
KODI->Log(LOG_NOTICE, "Settings XML file is empty.");
return;
}
string mainCategory = pRootElement->Value();
for(TiXmlNode *pGroupNode = pRootElement->FirstChild(); pGroupNode != NULL; pGroupNode = pRootElement->IterateChildren(pGroupNode))
{
if(pGroupNode->ValueStr() == "settings_group")
{
ATTRIBUTES_LIST groupAttributesList;
if(pGroupNode && pGroupNode->Type() == TiXmlNode::TINYXML_ELEMENT)
{
getAttributesAsList(pGroupNode->ToElement(), groupAttributesList);
}
if(pGroupNode && pGroupNode->Type() == TiXmlNode::TINYXML_ELEMENT && groupAttributesList.size() == 2 && pGroupNode->ValueStr() == "settings_group")
{
string subCategory = "";
string groupName = "";
for(ATTRIBUTES_LIST::iterator iter = groupAttributesList.begin(); iter != groupAttributesList.end(); iter++)
{
if(iter->first == "sub_category")
{
subCategory = iter->second;
}
if(iter->first == "group_name")
{
groupName = iter->second;
}
}
for(TiXmlNode *pKeyNode = pGroupNode->FirstChild(); pKeyNode != NULL; pKeyNode = pGroupNode->IterateChildren(pKeyNode))
{
if(pKeyNode && pKeyNode->Type() == TiXmlNode::TINYXML_ELEMENT && pKeyNode->ValueStr() == "setting")
{
ATTRIBUTES_LIST settingAttributesList;
if(getAttributesAsList(pKeyNode->ToElement(), settingAttributesList) == 2)
{
string key = "";
ISettingsElement::SettingsTypes type = ISettingsElement::UNKNOWN_SETTING;
string value = "";
for(ATTRIBUTES_LIST::iterator iter = settingAttributesList.begin(); iter != settingAttributesList.end(); iter++)
{
if(iter->first == "key")
{
key = iter->second;
}
else
{
type = CSettingsHelpers::TranslateTypeStrToEnum(iter->first);
value = iter->second;
}
}
ISettingsElement *setting = find_Setting(mainCategory, subCategory, groupName, key);
if(setting && setting->get_Type() == type)
{
switch(type)
{
case ISettingsElement::STRING_SETTING:
STRING_SETTINGS(setting)->set_Setting(value);
break;
case ISettingsElement::UNSIGNED_INT_SETTING:
{
unsigned int val = stringToVal<unsigned int>(value);
UNSIGNED_INT_SETTINGS(setting)->set_Setting(val);
}
break;
case ISettingsElement::INT_SETTING:
{
int val = stringToVal<int>(value);
INT_SETTINGS(setting)->set_Setting(val);
}
break;
case ISettingsElement::FLOAT_SETTING:
{
float val = stringToVal<float>(value);
FLOAT_SETTINGS(setting)->set_Setting(val);
}
break;
case ISettingsElement::DOUBLE_SETTING:
{
double val = stringToVal<double>(value);
//.........这里部分代码省略.........
示例12: Open
bool WorkspaceLoader::Open(const wxString& filename, wxString& Title)
{
TiXmlDocument doc;
if (!TinyXML::LoadDocument(filename, &doc))
return false;
// ProjectManager* pMan = Manager::Get()->GetProjectManager();
// LogManager* pMsg = Manager::Get()->GetLogManager();
if (!GetpMan() || !GetpMsg())
return false;
// BUG: Race condition. to be fixed by Rick.
// If I click close AFTER pMan and pMsg are calculated,
// I get a segfault.
// I modified classes projectmanager and logmanager,
// so that when self==NULL, they do nothing
// (constructors, destructors and static functions excempted from this)
// This way, we'll use the *manager::Get() functions to check for nulls.
TiXmlElement* root = doc.FirstChildElement("CodeBlocks_workspace_file");
if (!root)
{
// old tag
root = doc.FirstChildElement("Code::Blocks_workspace_file");
if (!root)
{
GetpMsg()->DebugLog(_T("Not a valid Code::Blocks workspace file..."));
return false;
}
}
TiXmlElement* wksp = root->FirstChildElement("Workspace");
if (!wksp)
{
GetpMsg()->DebugLog(_T("No 'Workspace' element in file..."));
return false;
}
Title = cbC2U(wksp->Attribute("title")); // Conversion to unicode is automatic (see wxString::operator= )
TiXmlElement* proj = wksp->FirstChildElement("Project");
if (!proj)
{
GetpMsg()->DebugLog(_T("Workspace file contains no projects..."));
return false;
}
// first loop to load projects
while (proj)
{
if(Manager::isappShuttingDown() || !GetpMan() || !GetpMsg())
return false;
wxString projectFilename = UnixFilename(cbC2U(proj->Attribute("filename")));
if (projectFilename.IsEmpty())
{
GetpMsg()->DebugLog(_T("'Project' node exists, but no filename?!?"));
}
else
{
wxFileName fname(projectFilename);
wxFileName wfname(filename);
fname.MakeAbsolute(wfname.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR));
int active = 0;
int ret = proj->QueryIntAttribute("active", &active);
switch (ret)
{
case TIXML_SUCCESS:
if (active == 1)
{
cbProject* pProject = GetpMan()->LoadProject(fname.GetFullPath(), true); // activate it
if(!pProject)
{
cbMessageBox(_("Unable to open ") + projectFilename,
_("Opening WorkSpace") + filename, wxICON_WARNING);
}
}
break;
case TIXML_WRONG_TYPE:
GetpMsg()->DebugLog(F(_T("Error %s: %s"), doc.Value(), doc.ErrorDesc()));
GetpMsg()->DebugLog(_T("Wrong attribute type (expected 'int')"));
break;
default:
cbProject* pProject = GetpMan()->LoadProject(fname.GetFullPath(), false); // don't activate it
if(!pProject)
{
cbMessageBox(_("Unable to open ") + projectFilename,
_("Opening WorkSpace") + filename, wxICON_WARNING);
}
break;
}
}
proj = proj->NextSiblingElement("Project");
}
// second loop to setup dependencies
proj = wksp->FirstChildElement("Project");
while (proj)
{
cbProject* thisprj = 0;
wxString projectFilename = UnixFilename(cbC2U(proj->Attribute("filename")));
//.........这里部分代码省略.........
示例13: LoadImpl
bool OgreMeshLoader::LoadImpl( const STRING& filename, bool bFlipUV )
{
TiXmlDocument doc;
if(!doc.LoadFile(filename.c_str()))
{
throw std::logic_error("Error, Can't load .mesh file! Please make sure it's xml format!");
return false;
}
m_objs.clear();
SR::RenderObject* obj = new SR::RenderObject;
m_objs.push_back(obj);
TiXmlElement* submeshNode = doc.FirstChildElement("mesh")->FirstChildElement("submeshes")->FirstChildElement("submesh");
//读取面信息
{
TiXmlElement* facesNode = submeshNode->FirstChildElement("faces");
int nFace = 0;
facesNode->Attribute("count", &nFace);
obj->m_faces.resize(nFace);
int idx = 0;
TiXmlElement* faceNode = facesNode->FirstChildElement("face");
while (faceNode)
{
int v1, v2, v3;
faceNode->Attribute("v1", &v1);
faceNode->Attribute("v2", &v2);
faceNode->Attribute("v3", &v3);
SR::SFace face(v1, v2, v3);
obj->m_faces[idx++] = std::move(face);
faceNode = faceNode->NextSiblingElement("face");
}
}
//读取顶点数据
{
TiXmlElement* geometryNode = submeshNode->FirstChildElement("geometry");
int nVert = 0;
geometryNode->Attribute("vertexcount", &nVert);
obj->m_verts.resize(nVert);
TiXmlElement* vbNode = geometryNode->FirstChildElement("vertexbuffer");
//check what we have..
if(vbNode->Attribute("positions") != STRING("true"))
{
throw std::logic_error("Error, the .mesh file doesn't even have vertex position info!");
return false;
}
if(vbNode->Attribute("normals") != STRING("true"))
{
throw std::logic_error("Error, the .mesh file doesn't even have vertex normal info!");
return false;
}
int idx = 0;
TiXmlElement* vertNode = vbNode->FirstChildElement("vertex");
while (vertNode)
{
//position
TiXmlElement* posNode = vertNode->FirstChildElement("position");
double x, y, z;
posNode->Attribute("x", &x);
posNode->Attribute("y", &y);
posNode->Attribute("z", &z);
//normal
TiXmlElement* normalNode = vertNode->FirstChildElement("normal");
double nx, ny, nz;
normalNode->Attribute("x", &nx);
normalNode->Attribute("y", &ny);
normalNode->Attribute("z", &nz);
//uv
TiXmlElement* uvNode = vertNode->FirstChildElement("texcoord");
double texu, texv;
if(uvNode)
{
uvNode->Attribute("u", &texu);
uvNode->Attribute("v", &texv);
if(bFlipUV)
texv = 1 - texv;
}
SR::SVertex vert;
vert.pos = VEC4(x, y, z, 1);
vert.normal = VEC3(nx, ny, nz);
vert.normal.Normalize();
if(uvNode)
vert.uv = VEC2(texu, texv);
obj->m_verts[idx++] = std::move(vert);
vertNode = vertNode->NextSiblingElement("vertex");
}
//.........这里部分代码省略.........