You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-users@xerces.apache.org by Vitaly Prapirny <ma...@mebius.net> on 2011/04/06 09:35:43 UTC

Re: Thank You

Manish Yadav wrote:
> hi
> thanks for your reply. I searched for DOMLSSerializer class in the
> Xerces-C++ and samples but nothing clear.

I don't know what is not clear enough so i can't provide more clear
information about this, sorry.

> why can we just sinmple
> Domserialization class?

I do know nothing about Domserialization class.

> please help me and tell me how to do this ?
>

You can make your own serializer by traversing a DOM tree and saving
the data of every node to some file. Or you can try some more easy to
use library, e.g., http://www.codesynthesis.com/products/xsd/

Good luck!
	Vitaly

Re: Thank You

Posted by Vitaly Prapirny <ma...@mebius.net>.
Manish Yadav wrote:
> Can You explain me the proper process how to use xsd ? How to do this in
> Xerces c++ coz i need it in c++?

Please look for this information in the CodeSynthesis XSD documentation.
Or use support mailing lists  as described on the CodeSynthesis XSD web
page.

> i wrote a c++ code. when i run it on out put it shows paramater changed
> but when i saw the file on my disk there is no change .
> so will you see the code and tell me what i'm doing wrong?

You should write some additional code that serializes the DOM tree
to a file. You can use the DOMLSSerializer class for this as
demonstrated in the Xerces-C++ samples.

> one more question most of the people say You cant change the xml file
> through c++ program or dom parser.Most of them say you have traverse the
> whole file and write back it to a new file reach the node where you need
> the change and write it to a new file. delete the old file and rename
> the new file .
> Is it true? if its true Then will you explain me how to do this ? why
> cant we change a xml file without writing to a new file ?Is there any
> way possible so that we can make changes in xml file without writing it
> to a new file ? if there is a way will you explain me how to do this ?

You can write a new XML document to an old file, but you'll get a
corrupted source file if something going wrong while writing.

Good luck!
	Vitaly

Re: Thank You

Posted by Manish Yadav <ma...@orkash.com>.
On Wednesday 06 April 2011 01:05 PM, Vitaly Prapirny wrote:
> Manish Yadav wrote:
>> hi
>> thanks for your reply. I searched for DOMLSSerializer class in the
>> Xerces-C++ and samples but nothing clear.
>
> I don't know what is not clear enough so i can't provide more clear
> information about this, sorry.
>
>> why can we just sinmple
>> Domserialization class?
>
> I do know nothing about Domserialization class.
>
>> please help me and tell me how to do this ?
>>
>
> You can make your own serializer by traversing a DOM tree and saving
> the data of every node to some file. Or you can try some more easy to
> use library, e.g., http://www.codesynthesis.com/products/xsd/
>
> Good luck!
>     Vitaly
Hi  Thank You for reply and help,
  sorry I'm bothering you again but you seems to be the person who can 
help me .Please help this novice fellow.
Can You  explain me the proper process how to use xsd ? How to do this 
in Xerces c++ coz  i need it in c++?
Here is my actual problem , I want to change a tag value in a xml file 
using xcerses c++ dom parser
my xml file is this

?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.default.name</name>
<value> name</value>
</property>

</configuration>
I just want to change <value> name </value> to <value>next</value>
nobody in my mates or teachers know about xml parsing top of all there 
is no proper documentation which explain this process.
  so will You tell me how to do this using xcerces ?
i wrote a c++ code. when i run it on out put it shows paramater changed 
but when i saw the file on my disk there is no change .
so will you see the code and tell me what i'm doing wrong?
my c++ 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 )
{

        // 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"
       cout<<XMLString::transcode(value->getTextContent());
        cout<<"\n";
     }
   }
}
}




}

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

        GetConfig appConfig;

    appConfig.readConfigFile(configFile);


        return 0;
     }

one more question most of the people say You cant change the xml file  
through c++ program or dom parser.Most of them say you have traverse the 
whole file and write back it to a new file reach the node where you need 
the change and write it to a new file. delete the old file and rename 
the new file .
Is it true? if its true Then will you explain me how to do this ? why 
cant we change a xml file without writing to a new file ?Is there any 
way possible so that we can make changes in xml file without writing it 
to a new file ? if there is a way will you explain me how to do this ?

please help me with these doubts

Manish