本文整理汇总了C++中TiXmlHandle::ToNode方法的典型用法代码示例。如果您正苦于以下问题:C++ TiXmlHandle::ToNode方法的具体用法?C++ TiXmlHandle::ToNode怎么用?C++ TiXmlHandle::ToNode使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TiXmlHandle
的用法示例。
在下文中一共展示了TiXmlHandle::ToNode方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: removeTag
//---------------------------------------------------------
void ofXMLSettings::removeTag(string tag, int which){
vector<string> tokens = tokenize(tag,":");
//no tags so we return
if( tokens.size() == 0 ) return;
//grab the handle from the level we are at
//normally this is the doc but could be a pushed node
TiXmlHandle tagHandle = *storedHandle;
if(which < 0) which = 0;
for(int x=0;x<tokens.size();x++){
//we only support multi tags
//with same name at root level
if(x > 0) which = 0;
TiXmlHandle isRealHandle = tagHandle.ChildElement( tokens.at(x), which);
if ( !isRealHandle.Node() ) break;
else{
if (x == tokens.size()-1){
//if we are at the last tag and it exists
//we use its parent to remove it - haha
tagHandle.ToNode()->RemoveChild( isRealHandle.ToNode() );
}
tagHandle = isRealHandle;
}
}
tokens.clear();
}
示例2: tagExists
//---------------------------------------------------------
bool ofxXmlSettings::tagExists(const string& tag, int which){
vector<string> tokens = tokenize(tag,":");
bool found = false;
//grab the handle from the level we are at
//normally this is the doc but could be a pushed node
TiXmlHandle tagHandle = storedHandle;
if(which < 0) which = 0;
for(int x=0;x<(int)tokens.size();x++){
//we only support multi tags
//with same name at root level
if(x > 0) which = 0;
TiXmlHandle isRealHandle = tagHandle.ChildElement( tokens.at(x), which);
//as soon as we find a tag that doesn't exist
//we return false;
if ( !isRealHandle.ToNode() ){
found = false;
break;
}
else{
found = true;
tagHandle = isRealHandle;
}
}
return found;
}
示例3: AddElemToXML
// This method adds an element to XML file
void CErrorReportExporter::AddElemToXML(CString sName, CString sValue, TiXmlNode* root)
{
strconv_t strconv;
TiXmlHandle hElem = new TiXmlElement(strconv.t2utf8(sName));
root->LinkEndChild(hElem.ToNode());
TiXmlText* text = new TiXmlText(strconv.t2utf8(sValue));
hElem.ToElement()->LinkEndChild(text);
}
示例4: pushTagAt
void ofxFlashXFLBuilder :: pushTagAt( int i )
{
TiXmlHandle isRealHandle = storedHandle.ChildElement( i );
if( isRealHandle.ToNode() )
{
storedHandle = isRealHandle;
level++;
}
}
示例5: AddFilesToCrashDescriptionXML
BOOL CCrashInfoReader::AddFilesToCrashDescriptionXML(std::vector<FileItem> FilesToAdd)
{
strconv_t strconv;
TiXmlDocument doc;
CString sFileName = g_CrashInfo.m_Reports[0].m_sErrorReportDirName + _T("\\crashrpt.xml");
bool bLoad = doc.LoadFile(strconv.t2a(sFileName.GetBuffer(0)));
if(!bLoad)
return FALSE;
TiXmlNode* root = doc.FirstChild("CrashRpt");
if(!root)
return FALSE;
TiXmlHandle hFileItems = root->FirstChild("FileList");
if(hFileItems.ToElement()==NULL)
{
hFileItems = new TiXmlElement("FileList");
root->LinkEndChild(hFileItems.ToNode());
}
unsigned i;
for(i=0; i<FilesToAdd.size(); i++)
{
TiXmlHandle hFileItem = new TiXmlElement("FileItem");
hFileItem.ToElement()->SetAttribute("name", strconv.t2utf8(FilesToAdd[i].m_sDestFile));
hFileItem.ToElement()->SetAttribute("description", strconv.t2utf8(FilesToAdd[i].m_sDesc));
hFileItems.ToElement()->LinkEndChild(hFileItem.ToNode());
m_Reports[0].m_FileItems[FilesToAdd[i].m_sDestFile] = FilesToAdd[i];
}
bool bSave = doc.SaveFile();
if(!bSave)
return FALSE;
return TRUE;
}
示例6: pushTag
//---------------------------------------------------------
bool ofxXmlSettings::pushTag(const string& tag, int which){
int pos = tag.find(":");
// Either find the tag specified, or the first tag if colon-seperated.
string tagToFind((pos > 0) ? tag.substr(0,pos) :tag);
//we only allow to push one tag at a time.
TiXmlHandle isRealHandle = storedHandle.ChildElement(tagToFind, which);
if( isRealHandle.ToNode() ){
storedHandle = isRealHandle;
level++;
return true;
}else{
ofLogError("ofxXmlSettings") << "pushTag(): tag \"" << tag << "\" not found";
}
return false;
}
示例7: pushTag
//---------------------------------------------------------
bool ofxXmlSettings::pushTag(const string& tag, int which){
int pos = tag.find(":");
// Either find the tag specified, or the first tag if colon-seperated.
string tagToFind((pos > 0) ? tag.substr(0,pos) :tag);
//we only allow to push one tag at a time.
TiXmlHandle isRealHandle = storedHandle.ChildElement(tagToFind, which);
if( isRealHandle.ToNode() ){
storedHandle = isRealHandle;
level++;
return true;
}else{
printf("pushTag - <");
printf("%s",tag.c_str());
printf("> tag not found\n");
}
return false;
}
示例8: RemoveFilesFromCrashReport
BOOL CCrashInfoReader::RemoveFilesFromCrashReport(int nReport, std::vector<CString> FilesToRemove)
{
strconv_t strconv;
TiXmlDocument doc;
CString sFileName = m_Reports[nReport].m_sErrorReportDirName + _T("\\crashrpt.xml");
FILE* f = NULL;
#if _MSC_VER<1400
f = _tfopen(sFileName, _T("rb"));
#else
_tfopen_s(&f, sFileName, _T("rb"));
#endif
if(f==NULL)
{
return FALSE;
}
bool bLoad = doc.LoadFile(f);
fclose(f);
if(!bLoad)
{
return FALSE;
}
TiXmlNode* root = doc.FirstChild("CrashRpt");
if(!root)
{
return FALSE;
}
TiXmlHandle hFileItems = root->FirstChild("FileList");
if(hFileItems.ToElement()==NULL)
{
hFileItems = new TiXmlElement("FileList");
root->LinkEndChild(hFileItems.ToNode());
}
unsigned i;
for(i=0; i<FilesToRemove.size(); i++)
{
std::map<CString, ERIFileItem>::iterator it =
m_Reports[nReport].m_FileItems.find(FilesToRemove[i]);
if(it==m_Reports[nReport].m_FileItems.end())
continue; // Such file item name does not exists, skip
strconv_t strconv;
TiXmlHandle hElem = hFileItems.ToElement()->FirstChild(strconv.t2a(FilesToRemove[i]));
if(hElem.ToElement()!=NULL)
hFileItems.ToElement()->RemoveChild(hElem.ToElement());
if(it->second.m_bMakeCopy)
{
Utility::RecycleFile(it->second.m_sSrcFile, TRUE);
}
m_Reports[nReport].m_FileItems.erase(it);
}
#if _MSC_VER<1400
f = _tfopen(sFileName, _T("w"));
#else
_tfopen_s(&f, sFileName, _T("w"));
#endif
if(f==NULL)
return FALSE;
bool bSave = doc.SaveFile(f);
if(!bSave)
return FALSE;
fclose(f);
return TRUE;
}
示例9: AddFilesToCrashReport
BOOL CCrashInfoReader::AddFilesToCrashReport(int nReport, std::vector<ERIFileItem> FilesToAdd)
{
strconv_t strconv;
TiXmlDocument doc;
CString sFileName = m_Reports[nReport].m_sErrorReportDirName + _T("\\crashrpt.xml");
FILE* f = NULL;
#if _MSC_VER<1400
f = _tfopen(sFileName, _T("rb"));
#else
_tfopen_s(&f, sFileName, _T("rb"));
#endif
if(f==NULL)
{
return FALSE;
}
bool bLoad = doc.LoadFile(f);
fclose(f);
if(!bLoad)
{
return FALSE;
}
TiXmlNode* root = doc.FirstChild("CrashRpt");
if(!root)
{
return FALSE;
}
TiXmlHandle hFileItems = root->FirstChild("FileList");
if(hFileItems.ToElement()==NULL)
{
hFileItems = new TiXmlElement("FileList");
root->LinkEndChild(hFileItems.ToNode());
}
unsigned i;
for(i=0; i<FilesToAdd.size(); i++)
{
if(m_Reports[0].m_FileItems.find(FilesToAdd[i].m_sDestFile)!=m_Reports[0].m_FileItems.end())
continue; // Such file item already exists, skip
TiXmlHandle hFileItem = new TiXmlElement("FileItem");
hFileItem.ToElement()->SetAttribute("name", strconv.t2utf8(FilesToAdd[i].m_sDestFile));
hFileItem.ToElement()->SetAttribute("description", strconv.t2utf8(FilesToAdd[i].m_sDesc));
if(FilesToAdd[i].m_bAllowDelete)
hFileItem.ToElement()->SetAttribute("optional", "1");
hFileItems.ToElement()->LinkEndChild(hFileItem.ToNode());
m_Reports[nReport].m_FileItems[FilesToAdd[i].m_sDestFile] = FilesToAdd[i];
if(FilesToAdd[i].m_bMakeCopy)
{
CString sDestPath = m_Reports[nReport].m_sErrorReportDirName + _T("\\") + FilesToAdd[i].m_sDestFile;
CopyFile(FilesToAdd[i].m_sSrcFile, sDestPath, TRUE);
m_Reports[nReport].m_FileItems[FilesToAdd[i].m_sDestFile].m_sSrcFile = sDestPath;
}
}
#if _MSC_VER<1400
f = _tfopen(sFileName, _T("w"));
#else
_tfopen_s(&f, sFileName, _T("w"));
#endif
if(f==NULL)
return FALSE;
bool bSave = doc.SaveFile(f);
if(!bSave)
return FALSE;
fclose(f);
return TRUE;
}
示例10: writeTag
//---------------------------------------------------------
int ofXMLSettings::writeTag(string tag, char * valueStr, int which){
vector<string> tokens = tokenize(tag,":");
// allocate then clean up :
TiXmlElement ** elements = new TiXmlElement*[tokens.size()];
for(int x=0;x<tokens.size();x++){
elements[x] = new TiXmlElement(tokens.at(x));
}
TiXmlText Value(valueStr);
// search our way up - do these tags exist?
// find the first that DOESNT exist, then move backwards...
TiXmlHandle tagHandle = *storedHandle;
bool addNewTag = false;
if(which == -1)addNewTag = true;
for(int x=0;x<tokens.size();x++){
if( x > 0 ){
//multi tags of same name
//only for the root level
which = 0;
addNewTag = false;
}
TiXmlHandle isRealHandle = tagHandle.ChildElement( tokens.at(x), which);
if ( !isRealHandle.Node() || addNewTag){
for(int i=tokens.size()-1;i>=x;i--){
if (i == tokens.size()-1){
elements[i]->InsertEndChild(Value);
} else {
elements[i]->InsertEndChild(*(elements[i+1]));
}
}
tagHandle.ToNode()->InsertEndChild(*(elements[x]));
break;
} else {
tagHandle = isRealHandle;
if (x == tokens.size()-1){
// what we want to change : TiXmlHandle valHandle = tagHandle.Child( 0 );
tagHandle.ToNode()->Clear();
tagHandle.ToNode()->InsertEndChild(Value);
}
}
}
//lets find how many of the same tags exist
//then we can return the numTags;
int numSameTags = 0;
while( (storedHandle->ChildElement( tokens.at(0), numSameTags )).Node() ){
numSameTags++;
}
//now, clear that vector!
tokens.clear();
return numSameTags;
}
示例11: entityfile
shared_ptr<Entity> EntityFactory::createEntity(const string& path)
{
shared_ptr<Entity> entity(new Entity);
shared_ptr<RenderJob> renderjob(new RenderJob());
entity->setRenderJob(renderjob);
TiXmlDocument entityfile(path);
if (!entityfile.LoadFile()) { // If error when loading file.
LOG(logERROR) << "Error when loading entity file " << path <<
"\nError at line " << entityfile.ErrorRow() <<
"\nError description: " << entityfile.ErrorDesc();
throw EntityCreationError();
}
TiXmlHandle dochandle = TiXmlHandle(&entityfile).FirstChild("entity");
// Set name and description.
TiXmlElement* name_element = dochandle.FirstChild("name").ToElement();
if (name_element)
entity->setName(name_element->GetText());
else
LOG(logWARNING) << "No name element in entity file " << path;
TiXmlElement* desc_element = dochandle.FirstChild("desc").ToElement();
if (desc_element) {
entity->setDesc(desc_element->GetText());
}
else {
LOG(logWARNING) << "No desc element in entity file " << path;
}
/*
* Load gfx.
*/
// Textures are loaded to an array in the order they are declared. My shader
// code assumes that the albedo texture is index 0 and the normal map in
// index 1.
TiXmlHandle texhandle = dochandle.FirstChild("gfx").FirstChild("textures");
if (texhandle.ToNode()) { // If texture tag exists.
vector<GLuint> created_textures;
TiXmlElement* texture_element;
int i = 0;
while (texture_element = texhandle.ChildElement(i++).ToElement()) {
string texname(texture_element->GetText());
created_textures.push_back(Locator::getFileService().makeTexture(texname));
}
int num_textures = created_textures.size();
if (num_textures > 0) {
renderjob->m_textures = new GLuint[num_textures];
}
renderjob->m_num_textures = num_textures;;
for (int i = 0; i < num_textures; i++) {
renderjob->m_textures[i] = created_textures[i];
}
}
// Load model and check number of materials.
TiXmlElement* model_element =
dochandle.FirstChild("gfx").FirstChild("model").ToElement();
if (!model_element) {
LOG(logERROR) << "No model element in entity file " << path;
throw EntityCreationError();
}
string modelpath = "assets/models/" + string(model_element->GetText()) + ".obj";
string absolute_path(Locator::getFileService().getRealPath(modelpath));
ObjFile model(absolute_path);
// Load shaders.
bool materials_defined = false; // Needed to determine whether uniform blocks are created.
{
TiXmlElement* shader_defines_element =
dochandle.FirstChild("gfx").FirstChild("shader_defines").ToElement();
if (!shader_defines_element) {
LOG(logERROR) << "No shader_defines element in entity file " << path;
throw EntityCreationError();
}
set<string> defines;
string shader_defines(shader_defines_element->GetText());
// Tokenize shader_defines;
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> comma(", ");
tokenizer tokens(shader_defines, comma);
foreach(string define, tokens) {
defines.insert(define);
}
GLuint num_materials = model.getNumMaterials();
string materials_define("MATERIALS");
if (defines.find(materials_define) != defines.end()) { // If materials define found.
materials_defined = true;
defines.erase(materials_define);
stringstream materials_define_stream;
materials_define_stream << materials_define << " " << num_materials;
defines.insert(materials_define_stream.str());
}
// Insert vertex attrib indices.
//.........这里部分代码省略.........
示例12: writeTag
//---------------------------------------------------------
int ofxXmlSettings::writeTag(const string& tag, const string& valueStr, int which){
vector<string> tokens = tokenize(tag,":");
// allocate on the stack
vector<TiXmlElement> elements;
elements.reserve(tokens.size());
for(int x=0;x<(int)tokens.size();x++)
elements.push_back(tokens.at(x));
TiXmlText Value(valueStr);
// search our way up - do these tags exist?
// find the first that DOESNT exist, then move backwards...
TiXmlHandle tagHandle = storedHandle;
bool addNewTag = false;
if(which == -1)addNewTag = true;
for(int x=0;x<(int)tokens.size();x++){
if( x > 0 ){
//multi tags of same name
//only for the root level
which = 0;
addNewTag = false;
}
TiXmlHandle isRealHandle = tagHandle.ChildElement( tokens.at(x), which);
if ( !isRealHandle.ToNode() || addNewTag){
for(int i=(int)tokens.size()-1;i>=x;i--){
if (i == (int)tokens.size()-1){
elements[i].InsertEndChild(Value);
} else {
elements[i].InsertEndChild(elements[i+1]);
}
}
tagHandle.ToNode()->InsertEndChild(elements[x]);
break;
} else {
tagHandle = isRealHandle;
if (x == (int)tokens.size()-1){
// what we want to change : TiXmlHandle valHandle = tagHandle.Child( 0 );
tagHandle.ToNode()->Clear();
tagHandle.ToNode()->InsertEndChild(Value);
}
}
}
//lets count how many tags with our name exist so we can return an index
//ripped from tinyXML as doing this ourselves once is a LOT! faster
//than having this called n number of times in a while loop - we go from n*n iterations to n iterations
int numSameTags;
TiXmlElement* child = ( storedHandle.FirstChildElement( tokens.at(0) ) ).ToElement();
for (numSameTags = 0; child; child = child->NextSiblingElement( tokens.at(0) ), ++numSameTags){
//nothing
}
return numSameTags;
}
示例13: CreateCrashDescriptionXML
// This method generates an XML file describing the crash
BOOL CErrorReportExporter::CreateCrashDescriptionXML(CErrorReportInfo& eri)
{
BOOL bStatus = FALSE;
ERIFileItem fi;
CString sFileName = eri.GetErrorReportDirName() + _T("\\crashrpt.xml");
CString sErrorMsg;
strconv_t strconv;
TiXmlDocument doc;
FILE* f = NULL;
CString sNum;
CString sCrashRptVer;
CString sOSIs64Bit;
CString sExceptionType;
fi.m_bMakeCopy = false;
fi.m_sDesc = _T("±ÀÀ£³ÌÐòÊôÐÔ¼¯");
fi.m_sDestFile = _T("crashrpt.xml");
fi.m_sSrcFile = sFileName;
fi.m_sErrorStatus = sErrorMsg;
// Add this file to the list
eri.AddFileItem(&fi);
TiXmlNode* root = root = new TiXmlElement("CrashRpt");
doc.LinkEndChild(root);
sCrashRptVer.Format(_T("%d"), CRASHRPT_VER);
TiXmlHandle(root).ToElement()->SetAttribute("version", strconv.t2utf8(sCrashRptVer));
TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "UTF-8", "" );
doc.InsertBeforeChild(root, *decl);
AddElemToXML(_T("CrashGUID"), eri.GetCrashGUID(), root);
AddElemToXML(_T("AppName"), eri.GetAppName(), root);
AddElemToXML(_T("AppVersion"), eri.GetAppVersion(), root);
AddElemToXML(_T("ImageName"), eri.GetImageName(), root);
AddElemToXML(_T("OperatingSystem"), eri.GetOSName(), root);
sOSIs64Bit.Format(_T("%d"), eri.IsOS64Bit());
AddElemToXML(_T("OSIs64Bit"), sOSIs64Bit, root);
AddElemToXML(_T("GeoLocation"), eri.GetGeoLocation(), root);
AddElemToXML(_T("SystemTimeUTC"), eri.GetSystemTimeUTC(), root);
if(eri.GetExceptionAddress()!=0)
{
sNum.Format(_T("0x%I64x"), eri.GetExceptionAddress());
AddElemToXML(_T("ExceptionAddress"), sNum, root);
AddElemToXML(_T("ExceptionModule"), eri.GetExceptionModule(), root);
sNum.Format(_T("0x%I64x"), eri.GetExceptionModuleBase());
AddElemToXML(_T("ExceptionModuleBase"), sNum, root);
AddElemToXML(_T("ExceptionModuleVersion"), eri.GetExceptionModuleVersion(), root);
}
sExceptionType.Format(_T("%d"), m_CrashInfo.m_nExceptionType);
AddElemToXML(_T("ExceptionType"), sExceptionType, root);
if(m_CrashInfo.m_nExceptionType==CR_SEH_EXCEPTION)
{
CString sExceptionCode;
sExceptionCode.Format(_T("%d"), m_CrashInfo.m_dwExceptionCode);
AddElemToXML(_T("ExceptionCode"), sExceptionCode, root);
}
else if(m_CrashInfo.m_nExceptionType==CR_CPP_SIGFPE)
{
CString sFPESubcode;
sFPESubcode.Format(_T("%d"), m_CrashInfo.m_uFPESubcode);
AddElemToXML(_T("FPESubcode"), sFPESubcode, root);
}
else if(m_CrashInfo.m_nExceptionType==CR_CPP_INVALID_PARAMETER)
{
AddElemToXML(_T("InvParamExpression"), m_CrashInfo.m_sInvParamExpr, root);
AddElemToXML(_T("InvParamFunction"), m_CrashInfo.m_sInvParamFunction, root);
AddElemToXML(_T("InvParamFile"), m_CrashInfo.m_sInvParamFile, root);
CString sInvParamLine;
sInvParamLine.Format(_T("%d"), m_CrashInfo.m_uInvParamLine);
AddElemToXML(_T("InvParamLine"), sInvParamLine, root);
}
CString sGuiResources;
sGuiResources.Format(_T("%d"), eri.GetGuiResourceCount());
AddElemToXML(_T("GUIResourceCount"), sGuiResources, root);
CString sProcessHandleCount;
sProcessHandleCount.Format(_T("%d"), eri.GetProcessHandleCount());
AddElemToXML(_T("OpenHandleCount"), sProcessHandleCount, root);
AddElemToXML(_T("MemoryUsageKbytes"), eri.GetMemUsage(), root);
if(eri.GetScreenshotInfo().m_bValid)
{
TiXmlHandle hScreenshotInfo = new TiXmlElement("ScreenshotInfo");
root->LinkEndChild(hScreenshotInfo.ToNode());
TiXmlHandle hVirtualScreen = new TiXmlElement("VirtualScreen");
sNum.Format(_T("%d"), eri.GetScreenshotInfo().m_rcVirtualScreen.left);
//.........这里部分代码省略.........