Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » libxml und xmlNodePtr->children

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.05.2007, 14:18 Uhr
FunnyDingo



Hallo zusammen,

nachdem mein config-Singleton läuft, wollte ich ihm beibringen, eine XML Datei zu verarbeiten. Ihr mein Ansatz:
C++:
class_config::class_config()
{
    xmlTextReaderPtr xmlReader;
    int ret;

    //xmlReader = xmlReaderForFile("config.xml", NULL, XML_PARSE_NOERROR);
    xmlReader = xmlReaderForFile("config.xml", NULL, 0);
    if (xmlReader != NULL)
    {
        ret = xmlTextReaderRead(xmlReader);
        while(ret == 1)
        {
            xmlNodePtr currentNode = xmlTextReaderCurrentNode(xmlReader);
            if (xmlStrcmp(currentNode->name, (const xmlChar *)"base") == 0 && xmlTextReaderNodeType(xmlReader) == 1 && xmlTextReaderDepth(xmlReader) == 1)
                processBaseNode(currentNode->children);
            ret = xmlTextReaderRead(xmlReader);
        }
        xmlFreeTextReader(xmlReader);
        if (ret != 0)
        {
            std::cout << "config.xml failed to parse" << std::endl;
        }
    }
    else
    {
        std::cout << "Unable to open config.xml" << std::endl;
    }
}



void class_config::processBaseNode(xmlNodePtr startNode)
{
    xmlNodePtr currentNode = startNode;
    while(currentNode)
    {
        printf("CurrentNodeName %s, Type: %i, Content: %s\n", currentNode->name, currentNode->type, currentNode->content);
        currentNode = currentNode->next;
    }
}


Irgendwie bin ich über das Ergebnis erstaunt:
Code:
CurrentNodeName text, Type: 3, Content:

CurrentNodeName enablelog, Type: 1, Content: (null)
CurrentNodeName text, Type: 3, Content:


Das ist mein Beispiel File
Code:
<?xml version="1.0" encoding="iso-8859-1" ?>
<yac>
    <base>
    <enablelog>1</enablelog>
    </base>
    <npm name="http">
        <port>5000</port>
        <ip>0.0.0.0</ip>
    </npm>
</yac>

Also ich verstehe die Ausgabe gar nicht. Hat jemand ne Ahnung wo mein Fehler liegt?

Gruß,
Funny
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 29.05.2007 um 14:20 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.05.2007, 14:32 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wenn ich das richtig in errinnerung habe ist der richtige content erst im ersten childknoten.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.05.2007, 15:39 Uhr
FunnyDingo



Jap, das ist korrekt. Ich verstehe zwar nicht warum der Content erst im nächsten Child zur Verfügung steht, aber folgendes Funktioniert:
C++:
if (currentNode->children)
            printf("  Content: %s\n", currentNode->children->content);


Steht das eigentlich irgendwo in der Doku und ich habs überlesen oder ergibt sich das aufgrund des DOM-Models (das ich ehrlich gesagt kaum kenne) autoamtisch?
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 29.05.2007 um 15:39 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.05.2007, 17:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


nachja doch - ergibt sich daraus - alles was in den tags steht werden zu children. daher würde ich tippen wird der nicht-tag-content ins erste child gelegt.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.05.2007, 19:32 Uhr
FunnyDingo



Okay, macht Sinn. Ich hatte damit gerechnet, dass der Parser erkennt, das diese Node keine "echten" Childs mehr hat und somit den content entsprechend füllt.
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: