Как я могу написать или обновить существующий XML-файл, используя часть кода xerces SAX parser.Reader, упомянутую ниже, и с нетерпением ожидаем записи XML-файла в том же блоке кода. Считыватель SAX-анализатора инициализирован и может проанализировать документ и показать результат, но я не могу записать файл соответствующим образом. Если кто-нибудь может помочь мне написать тот же файл с помощью Xerces. Я использую инструмент Qt Creator для разработки.
Совместное использование кода будет оценено
Мой код показан ниже.
#include <iostream>
#include <map>
#include <xercesc/parsers/SAXParser.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
#include "handler.hpp"
using namespace std;
using namespace xercesc;
static void printDict( map<string,string> * dict, string name = "" )
{
if ( dict == 0 )
return;
if ( name.size() > 0 )
cout << "Dictionary: " << name << endl;
for ( auto i : *dict ) {
cout << i.first << " -> " << i.second << endl;
}
}int main( int argc, char **argv )
{
try {
// Initialize the Xerces system.
XMLPlatformUtils::Initialize();
}
catch (const XMLException& e) {
cerr << "Xerces system initialization failed: " << e.getMessage() << endl;
return 1;
}
// Parse document here
SAXParser *parser = new SAXParser;
parser->setValidationScheme( SAXParser::Val_Auto );
parser->setDoNamespaces( true ); // default: false
parser->setDoSchema( true ); // default: false
parser->setHandleMultipleImports( true );
parser->setValidationSchemaFullChecking( false );
DictionaryHandler handler;
parser->setDocumentHandler( &handler );
parser->setErrorHandler( &handler );
parser->setDTDHandler( &handler ); // use default behavior
int errors = 0;
try {
handler.resetErrors();
parser->parse( "C:/Users/home/Documents/Parse/dictionary.xml" );
cout << "Warnings : " << handler.getWarningCount() << endl;
cout << "Errors : " << handler.getErrorCount() << endl;
// use hanlder output here
printDict( handler.getDictionary(), handler.getDictionaryName() );
}
catch (const OutOfMemoryException&) {
cerr << "OutOfMemoryException" << endl;
errors++;
}
catch (const XMLException& e) {
cerr << "XMLException" << endl;
char *message = XMLString::transcode( e.getMessage() );
cerr << "\tmessage:\t" << message << endl;
XMLString::release( &message );
errors++;
}
delete parser;
// Shutdown the Xerces system.
XMLPlatformUtils::Terminate();
return errors
}
Задача ещё не решена.
Других решений пока нет …