Re: [xml] libxml2 API crazy?

On 4/29/2013 07:59, Nikita Churaev wrote:
No it's not.

xmlDoc has int compression instead of xmlNode's xmlNs
I see what you mean. All node types are using same layout containing basic
stuff to link node in a tree - up to 'doc' field. That's what a comment in tree.h means:

struct _xmlNode {
    void           *_private;    /* application data */
    xmlElementType   type;    /* type number, must be second ! */
    const xmlChar   *name;      /* the name of the node, or the entity */
    struct _xmlNode *children;    /* parent->childs link */
    struct _xmlNode *last;    /* last child link */
    struct _xmlNode *parent;    /* child->parent link */
    struct _xmlNode *next;    /* next sibling link  */
    struct _xmlNode *prev;    /* previous sibling link  */
    struct _xmlDoc  *doc;    /* the containing document */

    /* End of common part */

So to be clean with casting it should have some sort of header struct containing these fields only, and have every node type start with this header, it's just not done this way. To be safe you always
need to check type and cast appropriately.

On Mon, 2013-04-29 at 07:48 +0400, Nikolay Sivov wrote:
On 4/29/2013 07:30, Nikita Churaev wrote:
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <stdio.h>

main (int argc, char** argv)
    xmlDocPtr doc = xmlReadMemory("<doc/>", 6, "egg.xml", NULL, 0);

                    /* XmlNode */            /* XmlDoc */
    printf("%s\n", (doc->children->parent == doc) ? "true" : "false");
    return 0;

This gives out "true"... Why? xmlNode.parent is xmlNodePtr... So I can't
just rely on xmlNode pointers to actually point to xmlNode?
Just take a look what xmlDocPtr actually is - document is also a node.
   I looked all
around the API reference and tutorials and found nothing on this topic.

xml mailing list, project page
xml gnome org

xml mailing list, project page
xml gnome org

xml mailing list, project page
xml gnome org

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]