Re: [xml] libxml2 API crazy?

On 4/29/2013 08:18, Nikita Churaev wrote:
Is this allowed by the C standard? And where is this documented?
It doesn't have anything to do with C standard. Not sure if it's documented anywhere, you have headers with all that info, personally I just read lib code if in doubt.

On Mon, 2013-04-29 at 08:14 +0400, Nikolay Sivov wrote:
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

xml mailing list, project page
xml gnome org

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