c++ dom parsing problem

hi every body
i'm new to c++ and xerces. i'm triying to make change in an xml file using xerces dom parser. my xml file which i want to change is following : its name is sel.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
<name>fs.default.name</name>
<value> name</value>
</property>

</configuration>

i want to change <value>name</value> to <value>next</next>

my cpp file code is following:

#include<string.h>
#include<iostream>
#include<sstream>
#include<sys/types.h>
#include<unistd.h>
#include<errno.h>
#include<sys/stat.h>
#include "parser1.hpp"
#include <typeinfo>
using namespace xercesc ;
using namespace std;

GetConfig::GetConfig()
{
XMLPlatformUtils::Initialize();
TAG_configuration =XMLString::transcode("configuration");
TAG_property = XMLString::transcode("property");
TAG_name=XMLString::transcode("name");
TAG_value=XMLString::transcode("value");
m_ConfigFileParser=new XercesDOMParser;
}
GetConfig::~GetConfig()
{
delete m_ConfigFileParser;

XMLString::release( &TAG_configuration );
XMLString::release( &TAG_property );
//XMLString::release( &TAG_value );
//XMLString::release( &TAG_name );
XMLPlatformUtils::Terminate();
}
void GetConfig :: readConfigFile(string& configFile)
throw( std::runtime_error )
{
/*struct stat fileStatus;
int iretStat = stat(configFile.c_str(), &fileStatus);
if( iretStat == ENOENT )
throw ( std::runtime_error("Path file_name does not exist, or path is an empty string.") );
else if( iretStat == ENOTDIR )
throw ( std::runtime_error("A component of the path is not a directory."));
else if( iretStat == ELOOP )
throw ( std::runtime_error("Too many symbolic links encountered while traversing the path."));
else if( iretStat == EACCES )
throw ( std::runtime_error("Permission denied."));
else if( iretStat == ENAMETOOLONG )
throw ( std::runtime_error("File can not be read\n"));
*/
// Configure DOM parser.

m_ConfigFileParser->setValidationScheme( XercesDOMParser::Val_Never );
m_ConfigFileParser->setDoNamespaces( false );
m_ConfigFileParser->setDoSchema( false );
m_ConfigFileParser->setLoadExternalDTD( false );

m_ConfigFileParser->parse( configFile.c_str() );

DOMDocument* doc = m_ConfigFileParser->getDocument();
DOMElement *root = doc->getDocumentElement();
const XMLCh* tag = xercesc::XMLString::transcode("property");
const XMLCh* tag1 = xercesc::XMLString::transcode("value");
const XMLCh* tag2 = xercesc::XMLString::transcode("name");
//DOMNodeList * list= doc->getElementbyTagName("tag");
//cout<<moot;

//DOMNode * rootElem = doc->getDocumentElement();


cout << "\nfirst";


//DOMNode *root = doc->getFirstChild() ;

cout << "\nsecond\n";
cout<< root<<"\n" ;

if ( root )
{
cout<<"hi\n";
DOMElement* property = dynamic_cast<DOMElement*>( root->getElementsByTagName( tag )->item( 0) );

if ( property )
{
cout<<"hello";
DOMElement* name = dynamic_cast<DOMElement*>( property->getElementsByTagName( tag2 )->item( 0 ) );

if ( name )
{
cout<<"\nmanish\n";

DOMElement* value = dynamic_cast<DOMElement*>( property->getElementsByTagName( tag1 )->item( 0 ) );

if ( value )
{
cout<<XMLString::transcode(value->getTextContent());
cout<<"\n";
value->setTextContent( XMLString::transcode(" next") ); // this will update the element named "value"
}
}
}
}

int main()
{
string configFile="/home/manish.yadav/Desktop/sel.xml";

GetConfig appConfig;

appConfig.readConfigFile(configFile);


return 0;
}

i compiled the program successfully and the program is running correctly it shows the out put like that

first
second
0x1314e50
hi
hello
manish
name
the extra output are becoz i want to check the flow control of program

now my problem is that i used the method value->setTextContent( XMLString::transcode(" next") );
it is not working ;
in my xml file i saw the old value. the value is not changing there what should i do so that the value change in sel.xml file too?
what should i do to change the value in xml file ?
what i 'm doing wrong?
i goggled the matter lot but someone saying i cant make change in xml file .
to change xml file i have to read the content of file and create a new file .
can anybody explain what should i do?
i read the dom Programming guide, api Documentation but nothing substantial.
what is the method or way to read from old xml file and write it to a new file ?
can any body explain with code ?
how to make new xml file using dom c++ parser?




Topic archived. No new replies allowed.