Keresés

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

  • peterszky

    őstag

    válasz ArchElf #1166 üzenetére

    Közben rátaláltam a problémám forrására, az XML namespace "zavar" be, annak a kezelését kell megoldani.

    <Document xmlns="xyz" xmlns:xsi="<url>"> -> ezzel nem ment az XPath hivatkozás.
    <Document> -> ha kiszedtem, akkor viszont működött prímán, azt hiszem, hogy a namespace regisztrálás felé kell kutakodni, ennek kell utánanéznem.

    És sorry, hogy nem tettem futtatható kódot, eddigi kereséseim alapján nem egy túl elterjedt dolog ez, nem gondoltam volna, hogy ilyen gyorsan segítség érkezik :)

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

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