472,111 Members | 1,923 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,111 software developers and data experts.

expat GetAttribute help cpp

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;
}

Jul 20 '05 #1
1 1754
In article <br**********@newshispeed.ch>, David <no****@home.com> 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
pt**@interlog.com
Jul 20 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Mike Brown | last post: by
1 post views Thread by Ingo Blank | last post: by
2 posts views Thread by Thomas Guettler | last post: by
4 posts views Thread by alainpoint | last post: by
reply views Thread by Fabian Kr?ger | last post: by
2 posts views Thread by dwelch91 | last post: by
1 post views Thread by vadlapatlahari | last post: by
4 posts views Thread by RobG | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.