Hirdetés

Új hozzászólás Aktív témák

  • Jester01

    veterán

    válasz ArchElf #1166 üzenetére

    Nem tudom miért kell külön kérvényezni, hogy lehetőleg futtatható kódot kapjunk. :U

    Ha jól értettem mit akar a kolléga, az nekem működik:

    #include <iostream>
    using namespace std;

    #include <libxml/xmlreader.h>
    #include <libxml/tree.h>
    #include <libxml/xpath.h>

    int main()
    {
    const char xml[] = "<r><n1><n2>x</n2></n1><n1></n1></r>";

    xmlParserInputBufferPtr input = xmlParserInputBufferCreateMem(xml, sizeof(xml) - 1, XML_CHAR_ENCODING_NONE);
    xmlTextReaderPtr reader = xmlNewTextReader(input, NULL);
    xmlTextReaderNext(reader);
    xmlNodePtr subtree = xmlTextReaderExpand(reader);
    xmlXPathContextPtr xpathCtx = xmlXPathNewContext(subtree->doc);
    if(xpathCtx == NULL)
    {
    cerr << "xpath context create failed" << endl;
    return 1;
    }
    xpathCtx->node = subtree;
    xmlXPathObjectPtr xpathObj = xmlXPathEvalExpression((xmlChar*)"n1/n2", xpathCtx);
    if(xpathObj == NULL)
    {
    cerr << "xpath eval failed" << endl;
    return 2;
    }
    //printXPathNodes(xpathObj->nodesetval);
    cout << xpathObj->nodesetval->nodeNr << endl;
    return 0;
    }

    Jester

Új hozzászólás Aktív témák