i'm working on an little project using tinyxml. an i've got a question during working on this.
how can i read directly from a cstring??
in the last release i only can read from xml files....
Do you mean a C-style string (ie const char*) or a CString as in the MFC class, or something else?
From memory (I don't have the source here in front of me) there is a document.parse() method that takes a const char*.
i mean a mfc style cstring.
You should do something like this :
S = "<item />"; // or any other xml string
d . Parse ((LPCTSTR) S);
i use this
TiXmlDocument doc ;
but there no value in the parser, the first child is null....
where's my bug??
OK I'm not being smart, I just want to cover the obvious base: did you mean EXACTLY that code you posted?
You didn't initialise the string?
Assuming you meant that you did something like
as Yves posted, then are you checking the result of the parse?
eg (borrowed from the test program)
if ( doc.Error() )
printf( "Error in %s: %s\n", doc.Value(), doc.ErrorDesc() );
exit( 1 );
TiXmlElement* firstElement = doc.RootElement()->FirstChildElement();
i've got the bug....
i use the above code in a windows ce project and windows ce use unicode...
I used to use TinyXML for the PocketPC 2002 and didn't have a problem. I just had to perform a little basic conversion on data I got back from TinyXML.
...in a ppc application a const char* is a multibyte character (a character consists of two bytes). the first byte is the character himself and the second byte is 0.
when i convert my cstring to const char* the parse function reads the first byte as the first character(for example a tag open '<'). after this the function reads the second byte as the second character, but the character is 0 because it's not the second character, it's the second byte of the character. that throws a null pointer exception. ignore the 0.
the solution is not the best way and it's a little bit slowly but i can get the data out of my web service and that's what i want.
TiXmlDocument *doc = new TiXmlDocument();
CString sXml = TEXT("<?xml version="1.0" encoding="iso-8859-1"?>")
buf = (char*)malloc(sXml.GetLength());
memset(buf, 0, sizeof(buf));
for (int i=0; i< sXml.GetLength(); i++) buf[i] = sXml[i];//to parse only the character
if there's anybody who got a better way...please post it or send me an email....
Like B Sizer said, what about writing some simple conversion routines?
CString widexml = ...
MySingleByteString xml( widexml )
doc->Parse( xml.c_str( ))
this stuff has been done 100s of times, code *must* be out there on in the ppc SDK somewhere.
Alternatively do a unicode build of tinyxml, modifying/patching if required? It could be as simple as changing TinyXml something like
typedef wchar TXML_CHAR
typedef char TXML_CHAR
then all the char routines will probably work just fine, even with pChar++ etc.
**TiXmlDocument doc ;
try this one for CString usage to parse an xml string…….
sorry little changes in previous one…..
TiXmlDocument doc ;
Log in to post a comment.
Sign up for the SourceForge newsletter:
You seem to have CSS turned off.
Please don't fill out this field.