Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > expat GetAttribute help cpp

Reply
Thread Tools

expat GetAttribute help cpp

 
 
David
Guest
Posts: n/a
 
      12-14-2003
Hi,
I'm trying to parse an xml file and am a bit confused. I have created my
class XmlParser.


Also I have 3 other questions.
1-How to the GetAttribute to search for the value of a specific pattern ?
I want to get the value of the Count tag.

2- My file does not contain the standalone header ? How can I deal with
that.
3- In terms of memory handling is it righ to use the ParserFile method or
should i use another one ?


Too many questions I know,

thanks fo any help,


david


<?xml version="1.0"?>
<!DOCTYPE eSearchResult PUBLIC "-//NLM//DTD eSearchResult, 11 May 2002//EN"
"http://www.ncbi.nlm.nih.gov/entrez/query/DTD/eSearch_020511.dtd">
<eSearchResult>
<Count>338</Count>
<RetMax>1</RetMax>
<RetStart>0</RetStart>
<QueryKey>1</QueryKey>
<WebEnv>0qq2WLXpVUiIFEtvIrTlducz5uJT8c0vroAyBVMqIo qZjrVInjNh</WebEnv>
<IdList>
<Id>14645367</Id>
</IdList>
<TranslationSet>
<Translation>
<From>snorna%5BAll+Fields%5D</From>
<To>(%22rna,+small+nucleolar%22%5BMeSH+Terms%5D+OR +snorna%5BText+Word
5D)</To>
</Translation>
</TranslationSet>
<TranslationStack>
<TermSet>
<Term>"rna, small nucleolar"[MeSH Terms]</Term>
<Field>MeSH Terms</Field>
<Count>144</Count>
<Explode>Y</Explode>
</TermSet>
<TermSet>
<Term>snorna[Text Word]</Term>
<Field>Text Word</Field>
<Count>284</Count>
<Explode>Y</Explode>
</TermSet>
<OP>OR</OP>
</TranslationStack>
</eSearchResult>

-------------------------
#include <iostream>
#include "XmlParser.h"


using namespace std;

testclass.cpp
int main (int argc, char **argv)
{
FILE* xmlFile;
XmlParser parser;

xmlFile = fopen(argv[1], "r");


if (!parser.parseFile(xmlFile)) {
fprintf(stderr,
"%s at line %d\n",
XML_ErrorString(parser.XML_GetErrorCode()),
parser.XML_GetCurrentLineNumber());
return 1;
}


char *test = "count";
parser.getAttribute(test);

while (!feof (xmlFile))
XML_ParserFree(parser);
return 0;
}


---------------------------------------------
XmlParser.cpp
void XmlParser::startElement(const XML_Char* name, const XML_Char** atts)
{

cout <<"Attribut:"<<name <<" Depth:"<< mDepth <<endl;
mDepth++;
}


void XmlParser::endElement(const XML_Char*)
{
mDepth--;
}


void XmlParser::charData(const XML_Char *s, int len)
{
const int leadingSpace = skipWhiteSpace(s);
if (len==0 || len==leadingSpace)
return; // called with whitespace between elements


cout <<" Value:";
fwrite(s, len, 1, stdout);
cout<<" Depth:"<< (mDepth-1) <<endl;

}


const XML_Char* XmlParser::getAttribute(const XML_Char *matchingName)
{

cout << "Match:" << matchingName << endl;
}

 
Reply With Quote
 
 
 
 
Patrick TJ McPhee
Guest
Posts: n/a
 
      12-15-2003
In article <brif8t$gut$(E-Mail Removed)>, David <(E-Mail Removed)> wrote:

% 1-How to the GetAttribute to search for the value of a specific pattern ?
% I want to get the value of the Count tag.

Count is an element, not an attribute. in fact, your example contains
no attributes, only elements. If you're using expat, the parser doesn't
save anything for you -- you're expected to build whatever data structures
you need in your startElement method. You need to either save anything
you want to be able to query as the parse goes on, (i.e., stick the
element name and character value in a list), or you want to store the
names that you're interested in before the parse, then set a flag
when the appropriate elements come up, and print the character data
when the flag is set.

% 2- My file does not contain the standalone header ? How can I deal with
% that.

Most files don't have the standalone header. The example file doesn't
need anything from the DTD (unless there are default attribute values),
so you could simply not worry about it, but I think expat can read
external DTDs, so you could just let it read the DTD.

--

Patrick TJ McPhee
East York Canada
http://www.velocityreviews.com/forums/(E-Mail Removed)
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Want help on how we convert output to tabular format Using the expat parser (http://expat.sourceforge.net/) i have to parse the following xml file and print it on the screen in tabular format. sharan XML 1 10-26-2007 01:20 PM
Using the expat parser (http://expat.sourceforge.net/) i have to parse the following xml file and print it on the screen in tabular format. Want a c program on that! sharan XML 1 10-26-2007 07:56 AM
when i compile the cpp file(cmdargs.cpp) int main(int argc, wchar_t* argv[]) Vinu C++ 9 05-05-2005 04:11 AM
Method inlined in source1.cpp and called in source2.cpp Alex Vinokur C++ 7 11-15-2004 09:14 PM
What is better /standard for creating files. a cpp file with header or cpp and seperate file for header DrUg13 C++ 1 02-10-2004 09:20 AM



Advertisments