2016-11-02 3 views
0

ich eine XML-Datei zu analysieren versuchen, und ich habe den richtigen Titel-Tag, aber es gibt Tags mehr Titel befinden, und ich brauche nur die erstes zu analysieren ein. Derzeit gibt meinen Code alle Titel-Tags Zum Beispiel:Wie nur 1 Tag parsen, wenn mutiple mit dem gleichen Namen ist mit Xerces C++

<book> 
    <title> 
    <title> 
    <title> 
<book> 
<movie> 
    <title> 
<movie> 

ich nur den ersten Titel in Buch benötigen.

Mein aktueller Code zieht alle Titel-Tags in Buch und gibt sie aus. Gibt es eine Möglichkeit, nach dem ersten Titel aufzuhören? Vielen Dank.

void MySaxHandler::startElement(
const XMLCh* const uri, 
const XMLCh* const localname, 
const XMLCh* const qname, 
const Attributes& attrs 
) { 
char* message = XMLString::transcode(localname); 
if (strcmp(message, "book") == 0) { 
    book = true; 
} 
else if (book && strcmp(message, "title") == 0) { 
    title = true; 
    titleBuffer = ""; 
} 
else if (strcmp(message, "movie") == 0) { 
    book = false; 
} 
else if (book && strcmp(message, "name") == 0) { 
    title = false; 
} 
XMLString::release(&message); 

Antwort

0

Machen Sie das title Flagge ein size_t und init es size_t(-1)

dann die Änderung if (book && strcmp(message, "title") == 0) in:

else if (book && strcmp(message, "title") == 0) { 
    title++; 
    if(0 == title) { // this is the one we want 
     titleBuffer = ""; 
     // perhaps registering a callback with the parser - say, firstTitleFound 
     // would allow you to do something like 
     // firstTitleFound(titleBuffer); 
     // and then capture the first titles of all the books in your document 
    } 
} 

Vielleicht um den Titel zu size_t(-1) auch zurückgesetzt, wenn Sie ein beliebiges Element auftreten, die enthalten ein Titel.

+0

Ich bin nicht sicher, ob ich verstehe, was Sie meinen. Ich habe mit diesem Code gespielt und es druckt entweder das gleiche oder leere Tags – govCode

+0

@govCode Weil die Art, wie Sie den Titel erfassen, ein Dummy ist. Wenn Sie nicht wissen, wie Sie den tatsächlichen Inhalt des Titels erhalten, werfen Sie eine andere Frage auf. Andernfalls, um den Code zu testen, fügen Sie Ihren Titelelementen in Ihrem Eingabedokument ein 'id'-Attribut hinzu und verwenden Sie den Wert (über' attrs' -Parameter) in den 'titleBuffer' –

Verwandte Themen